流畅映射SQLite中的奇怪外键约束
本文关键字:约束 映射 SQLite | 更新日期: 2023-09-27 17:50:53
我有一个使用FluentNhibernate编写的模型,我正在尝试在内存中的SQLite数据库中创建一些测试数据。
var fConfig =
Fluently.Configure()
.Database(config)
.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetAssembly(exampleClass))
.Conventions.Add(AutoImport.Never())
.Conventions.Add(new SQLiteGeometryTypeConvention())
.Conventions.Add(FluentNHibernate.Conventions.Helpers.DefaultLazy.Never()))
.ExposeConfiguration(cfg => configuration = cfg);
我得到的问题是,其中一个表是这样创建的,在生成的sql像这样:
create table myTable (
myID integer primary key autoincrement,
...{skip normal columns}
ForeignTable1ID INT,
ParentID BIGINT,
constraint FK1A2E045AFEC6908F foreign key (ForeignTable1ID) references ForeignTable1,
constraint FK1A2E045ABB4EBD1F foreign key (ParentID) references Parent,
constraint FKE21911CF6853D06E foreign key (myID) references Parent
)
我不想要第三个约束,但不知道是什么导致的!效果是,我只能在myTable中创建具有有效外键的记录,但也有存在于父表中的myID值。这是不必要的,我也看不出是什么原因。
映射文件如下所示:
Table("dbo.PalslagInventering");
Id(x => x.myId).Column("myID");
References(x => x.ForeignTable1).Column("ForeignTable1ID");
References(x => x.Parent).Column("ParentID");
Map(x => x.{other columns here});
HasMany(x => x.Child).KeyColumn("myID");
HasOne(x => x.Child2).ForeignKey("MyID");
HasMany(x => x.Child2).KeyColumn("MyID").ForeignKeyConstraintName("Child2");
HasMany(x => x.Child3).KeyColumn("MyID").ForeignKeyConstraintName("Child3");
父表(被引用)有一个简单的
public virtual IList<MyTable> myTableRecords { get; private set; }
代码类型映射为:
HasMany(x => x.myTableRecords)
.KeyColumn("myID")
.Inverse();
是什么导致"外键"引用回到它自己的myId?
错误似乎是:
HasMany(x => x.myTableRecords)
.KeyColumn("myID")
.Inverse();
子表(即:"MyTable"),其ID为"myID",并且KeyColumn应该指向父表(即"MyTable"中的外键)。
:
HasMany(x => x.myTableRecords)
.KeyColumn("ParentID")
.Inverse();
似乎已经解决了这个问题。错误在父类的映射文件中,这意味着我一开始就错过了它。