2012-02-14 13 views
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) 
) 

答えて

1
HasMany(x => x.Locations) 
    .PropertyRef(x => x.AreaCode) 

更新:それはその領域が保存されていない可能性があります。

HasMany(x => x.Locations) 
    .Cascade.All() 
+0

を実行して、重複する外部キーの問題を修正してください。しかし、ミスマッチエラーはまだ発生していますか? – Jesse