簡體   English   中英

Fluent-Nhibernate持久性規范測試生成SQLite錯誤外鍵不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM