2010-05-20 5 views
0

Я новичок в Fluent NHibernate, и у меня возникает проблема.Fluent NHibernate/SQL Server 2008 вставить задачу запроса

Я отображение определяется следующим образом:

public PersonMapping() 
    { 
     Id(p => p.Id).GeneratedBy.HiLo("1000"); 
     Map(p => p.FirstName).Not.Nullable().Length(50); 

     Map(p => p.MiddleInitial).Nullable().Length(1); 

     Map(p => p.LastName).Not.Nullable().Length(50); 
     Map(p => p.Suffix).Nullable().Length(3); 
     Map(p => p.SSN).Nullable().Length(11); 
     Map(p => p.BirthDate).Nullable(); 
     Map(p => p.CellPhone).Nullable().Length(12); 
     Map(p => p.HomePhone).Nullable().Length(12); 
     Map(p => p.WorkPhone).Nullable().Length(12); 
     Map(p => p.OtherPhone).Nullable().Length(12); 
     Map(p => p.EmailAddress).Nullable().Length(50); 
     Map(p => p.DriversLicenseNumber).Nullable().Length(50); 

     Component<Address>(p => p.CurrentAddress, m => 
     { 
      m.Map(p => p.Line1, "Line1").Length(50); 
      m.Map(p => p.Line2, "Line2").Length(50); 
      m.Map(p => p.City, "City").Length(50); 
      m.Map(p => p.State, "State").Length(50); 
      m.Map(p => p.Zip, "Zip").Length(2); 
     }); 

     Map(p => p.EyeColor).Nullable().Length(3); 
     Map(p => p.HairColor).Nullable().Length(3); 
     Map(p => p.Gender).Nullable().Length(1); 
     Map(p => p.Height).Nullable(); 
     Map(p => p.Weight).Nullable(); 
     Map(p => p.Race).Nullable().Length(1); 
     Map(p => p.SkinTone).Nullable().Length(3); 
     HasMany(p => p.PriorAddresses).Cascade.All(); 
    } 


    public PreviousAddressMapping() 
    { 
     Table("PriorAddress"); 

     Id(p => p.Id).GeneratedBy.HiLo("1000"); 
     Map(p => p.EndEffectiveDate).Not.Nullable(); 
     Component<Address>(p => p.Address, m => 
     { 
      m.Map(p => p.Line1, "Line1").Length(50); 
      m.Map(p => p.Line2, "Line2").Length(50); 
      m.Map(p => p.City, "City").Length(50); 
      m.Map(p => p.State, "State").Length(50); 
      m.Map(p => p.Zip, "Zip").Length(2); 
     }); 

    } 

Мой тест

[Test] 
    public void can_correctly_map_Person_with_Addresses() 
    { 
     var myPerson = new Person("Jane", "", "Doe"); 
     var priorAddresses = new[] 
     { 
      new PreviousAddress(ObjectMother.GetAddress1(), DateTime.Parse("05/13/2010")), 
      new PreviousAddress(ObjectMother.GetAddress2(), DateTime.Parse("05/20/2010")) 
     }; 

     new PersistenceSpecification<Person>(Session) 
      .CheckProperty(c => c.FirstName, myPerson.FirstName) 
      .CheckProperty(c => c.LastName, myPerson.LastName) 
      .CheckProperty(c => c.MiddleInitial, myPerson.MiddleInitial) 
      .CheckList(c => c.PriorAddresses, priorAddresses) 

      .VerifyTheMappings(); 
    } 

GetAddress1() (да, ужасно имя) имеет Line2 == нуль

Таблицы кажутся который будет правильно создан на сервере sql server 2008, но тест завершился неудачно с помощью SQLException. Строка или двоичные данные будут усечены. Когда я хватаю оператор SQL в SQL Profiler, я получаю

exec sp_executesql N'INSERT INTO PriorAddress (Line1, Line2, City, State, Zip, 
EndEffectiveDate, Id) VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6)',N'@p0 
nvarchar(18),@p1 nvarchar(4000),@p2 nvarchar(10),@p3 nvarchar(2),@p4 nvarchar(5),@p5 
datetime,@p6 int',@p0=N'6789 Somewhere Rd.',@p1=NULL,@p2=N'Hot 
Coffee',@p3=N'MS',@p4=N'09876',@p5='2010-05-13 00:00:00',@p6=1001 

Обратите внимание на параметр @ p1 в настоящее время установлен в NVARCHAR (4000) и передается значение NULL.

Зачем устанавливать параметр nvarchar (4000)? Как я могу это исправить?

Спасибо!

Моя первая теория о том, что она была связана с параметром Line2, была неправильной. Я добавил значение в Line2, повторил тест, и я все равно получаю ту же ошибку.

exec sp_executesql N'INSERT INTO PriorAddress 
     (Line1, Line2, City, State, Zip, EndEffectiveDate, Id) 
VALUES (@p0, @p1, @p2, @p3, @p4, @p5,    @p6)', 
N'@p0 nvarchar(18),@p1 nvarchar(6),@p2 nvarchar(10),@p3 nvarchar(2),@p4 
nvarchar(5),@p5 datetime,@p6 int', 
@p0=N'6789 Somewhere Rd.', 
@p1=N'A test', 
@p2=N'Hot Coffee', 
@p3=N'MS', 
@p4=N'09876', 
@p5='2010-05-13 00:00:00', 
@p6=1001 

ответ

3

Извините, я идиот. Я понял. Zip должен, вероятно, иметь большую длину, чем 2.

Смежные вопросы