0
これは比較的単純なマッピング/永続性テストだと思っていましたが、私の頭を叩いた後、私は専門家に向けると思いました。Fluent-Nhibernate永続性仕様テストでSQLiteエラーの外部キーの不一致が発生しました
私は、このエラーに実行している以下の持続性テスト実行中:
NHibernate.Exceptions.GenericADOException : could not insert: System.Data.SQLite.SQLiteException : SQLite error foreign key mismatch
重複する外部キーがあることが表示されますテストから生成された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)
)
を実行して、重複する外部キーの問題を修正してください。しかし、ミスマッチエラーはまだ発生していますか? – Jesse