[英]Fluent-Nhibernate Persistence Specification test generating SQLite error foreign key mismatch
我曾以為這將是一個相對簡單的映射/持久性測試,但是當我敲了敲這個問題之后,我想我會去找專家。
當運行下面的持久性測試時,我遇到了這個錯誤:
NHibernate.Exceptions.GenericADOException:無法插入:System.Data.SQLite.SQLiteException:SQLite錯誤外鍵不匹配
從測試檢查生成的sqllite表時,似乎存在重復的外鍵。 如果實際上這是我做錯的事情,則不確定如何解決此問題。
實體 :
public class Area
{
public virtual int AreaID { get; set; }
public virtual string AreaCode { get; set; }
public virtual string AreaDescription { get; set; }
public virtual IList<Location> Locations { get; set; }
}
public class Location {
public virtual int AreaID { get; set; }
public virtual string CityName { get; set; }
public virtual string AreaName { get; set; }
public virtual Area Area { get; set; }
}
映射 :
public AreaMap()
{
Table("Area");
LazyLoad();
Id(x => x.AreaID).GeneratedBy.Identity().Column("AreaID");
Map(x => x.AreaCode).Column("AreaCode").Not.Nullable().Length(2);
Map(x => x.AreaDescription).Column("AreaDescription").Not.Nullable().Length(50);
HasMany(x => x.Locations)
.KeyColumn("AreaCode")
.Inverse()
.Cascade.None();
}
public LocationMap()
{
Table("Locations");
LazyLoad();
Id(x => x.AreaID).GeneratedBy.Assigned().Column("AreaID");
Map(x => x.CityName).Column("CityName").Length(255);
Map(x => x.AreaName).Column("AreaName").Length(255);
References(x => x.Area)
.PropertyRef(x => x.AreaCode)
.Column("AreaCode")
.Fetch.Join();
}
測試 :
new PersistenceSpecification<Location>(Session)
.CheckProperty(x => x.AreaID, 1)
.CheckProperty(x => x.CityName, "SomeCity")
.CheckProperty(x => x.AreaName, "SomeSubArea")
.CheckReference(x => x.Area, new Area { AreaCode = "S1", AreaDescription = "Some description goes here" })
.VerifyTheMappings();
生成的表 :
create table Area (
AreaID integer primary key autoincrement,
AreaCode TEXT not null,
AreaDescription TEXT not null
)
create table Locations (
AreaID INT not null,
CityName TEXT,
AreaName TEXT,
AreaCode TEXT,
primary key (AreaID),
constraint FK6AF881A49C5CF81 foreign key (AreaCode) references Area,
constraint FK6AF881A49C5CF81 foreign key (AreaCode) references Area (AreaCode)
)
HasMany(x => x.Locations)
.PropertyRef(x => x.AreaCode)
更新:可能是該區域未保存。 試試看
HasMany(x => x.Locations)
.Cascade.All()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.