与EFCore2.1的一对一关系下面的代码是使用EFCore2.0的。自2.1更新以来,我遇到了一个阻塞错误:无法确定“Entity2.Main”和“Entity1.Metadata”之间的一对一关系的子/依赖方。要识别关系的子/依赖方,请配置外键属性。如果这些导航不应属于同一关系的一部分,请在不指定反向的情况下配置它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=724062。这些表是相似的(它们共享相同的id,但在不同的表上):Table_Entity1:-Id-Name-DescriptionTable_Entity2:-Id-Flag1-Flag2实体如下:publicclassEntity1{publiclongId{get;set;}publicstringName{get;set;}publicstringDescription{get;set;}publicEntity2Metadata{get;set;}}publicclassEntity2{publiclongId{get;set;}publicboolFlag1{get;set;}}publicboolFlag2{get;set;}publicEntity1Main{get;set;}}它们声明如下:builder.Entity(b=>{b.HasKey(e=>e.Id);b.Property(e=>e.Id).ValueGeneratedNever();b.HasOne(e=>e.Metadata).WithOne(e=>e.Main).HasForeignKey(e=>e.Id).HasPrincipalKey(e=>e.Id);b.ToTable("Table_Entity1");});builder.Entity(b=>{b.HasKey(e=>e.Id);b.T??oTable("Table_Entity2");});我该如何解决?我已经尝试了HasOne、WithOne、HasForeignKey的所有组合,但似乎没有任何效果……从您的模型来看,在我看来,实体1拥有实体2您是否遵循了Microsoft文档“所有实体类型”部分中的建议:https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities?您可以尝试将模型更改为:publicclassEntity2{publicboolFlag1{get;放;}publicboolFlag2{得到;放;}}publicclassEntity1{publiclongId{get;放;}公共字符串名称{得到;放;}公共字符串描述{得到;放;}公共Entity2元数据{得到;放;}}然后配置:builder.Entity(b=>{b.HasKey(e1=>e1.Id);b.OwnsOne(e1=>e1.Metadata,md=>{//我认为微软的例子Doc是错误的,但需要验证。//我在这里打开了一个问题://https://github.com/aspnet/EntityFramework.Docs/issues/772md.ToTable("Table_Entity2");});b.T??oTable("Table_Entity1");});免责声明:我手写了任何东西,所以没有经过测试。我通过添加OwnsOne解决了这个问题:以上是C#学习教程的全部内容:与EFCore2.1的一对一关系。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—builder.Entity(b=>{b.HasKey(e=>e.Id);b.Property(e=>e.Id).ValueGeneratedNever();b.OwnsOne(e=>e.Metadata);b.HasOne(e=>e.Metadata).WithOne(e=>e.Main).HasForeignKey(e=>e.Id);b.T??oTable("Table_Entity1");});builder.Entity(b=>{b.HasKey(e=>e.Id);b.T??oTable("Table_Entity2");});本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
