Je suis nouveau dans Fluent NHibernate et je rencontre un problème.
J'ai un mappage défini comme suit:
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
Mon test est
[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(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() (oui, nom horrible) a Line2 == null
Les tables semblent être créées correctement dans sql server 2008, mais le test échoue avec une SQLException "String or binary data would be truncated." Lorsque je capture l'instruction SQL dans SQL Profiler, je reçois
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
Remarquez que le paramètre @p1 est défini en nvarchar(4000) et reçoit une valeur NULL.
Pourquoi le paramètre est-il défini en nvarchar(4000)? Comment puis-je le résoudre?
Merci!
Ma première théorie selon laquelle cela était lié au paramètre Line2 était fausse. J'ai ajouté une valeur à Line2, relancé le test, et je reçois toujours la même erreur.
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