当前位置: 首页 > 编程语言 > C#

EFCodeFirst-在没有共享PK-FK共享的情况下配置一对一或零关系

时间:2023-04-10 21:00:37 C#

EFCodeFirst-在没有共享PK/FK的情况下配置一对一或零关系我试过设置一个-两个实体之间的一对一或零关系,我希望依赖实体仍包含其自己的Indentity列,而不是它是一个共享键。我想尽可能遵循约定,不显式声明任何不需要显式声明的东西(因此,没有不必要的数据注释或流畅的api子句)参与者:publicclassFile{publicintFileId{get;set;}//一些省略的文件属性publicvirtualTaskTask{get;set;}}publicclassTask{publicintTaskId{get;set;}//一些省略的任务属性publicintFileId{get;set;}publicvirtualFileFile{get;set;}}protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){modelBuilder.Entity().HasOptional(f=>f.Task).WithRequired(t=>t.File);base.OnModelCreating(模型构建器);这创建了一个奇怪的关系,其中TaskId是Tasks表的PK和FK列。在哪里,我认为它应该与文件ID具有相同的值?(这是个问题:))那么,如何使TaskId保持其自己的顺序值并使FileId成为Files表的外键?或者在1-0..1的情况下,我宁愿摆脱TaskId属性并使FileId成为PK/FK属性?干杯!不支持具有显式FK属性的双向一对一关系。因此,要么继续使用您现在拥有的-共享主键关联。只需从任务中删除TaskId或FileId属性之一,然后将其余属性设为PK(EF将自动将其用作FK,因为这是默认的EF一对一关系模型)。或者从Task中删除FieldId属性并使用以下流畅的配置(都是必需的):modelBuilder.Entity().HasOptional(f=>f.Task).WithRequired(t=>t.File).Map(m=>m.MapKey("FileId")).WillCascadeOnDelete();但我建议使用第一种方法(如果没有特殊原因不使用现有数据库),因为它得到更好的支持——第二种方法包括SQL查询中的一些LEFTOUTERJOIN,你可以从这篇文章EF中看到——WithOptional-左外连接?.以上就是C#学习教程的全部内容:EF代码优先-配置一对一或零关系共享,不共享PK/FK。如果对大家有用,需要进一步了解C#学习教程,还望大家多多多多关照——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: