Asp.net mvc Fluent Nhibernate持久性规范测试生成SQLite错误外键不匹配

Asp.net mvc Fluent Nhibernate持久性规范测试生成SQLite错误外键不匹配,asp.net-mvc,sqlite,nhibernate,fluent-nhibernate,Asp.net Mvc,Sqlite,Nhibernate,Fluent Nhibernate,我原以为这将是一个相对直接的映射/持久性测试,但在解决了这个问题后,我想我会求助于专家 在运行下面的持久性测试时,我遇到了以下错误: NHibernate.Exceptions.GenericADOException:无法插入: System.Data.SQLite.SQLiteException:SQLite错误外键不匹配 从测试中查看生成的sqllite表时,似乎存在重复的外键。不确定如何解决这个问题,如果这是我做错的 实体: public class Area { public v

我原以为这将是一个相对直接的映射/持久性测试,但在解决了这个问题后,我想我会求助于专家

在运行下面的持久性测试时,我遇到了以下错误:

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)
)
测试

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)
    .Cascade.All()

这纠正了重复外键的问题。但是,不匹配错误仍在发生?