C# EF6.1.1编码第一个一对零/一关系
我正在尝试定义这些表C# EF6.1.1编码第一个一对零/一关系,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我正在尝试定义这些表 _tbl1_ id (PK) _tbl2_ id (PK) tbl1_id (FK) _tbl3_ id (PK) tbl1_id (FK) …在这里我可以从Tbl1导航到Tbl2或Tbl3 或从Tbl2或Tbl3返回Tbl1 虽然需要从Tbl2或Tbl3到Tbl1的关联,但Tbl2或Tbl3中可能不存在记录;所以Tbl1记录应该能够与我们的Tbl2和Tbl3同时存在或同时存在 从Tbl1的角度来看,这种设计可以选择与两个完全不同的实体之
_tbl1_
id (PK)
_tbl2_
id (PK)
tbl1_id (FK)
_tbl3_
id (PK)
tbl1_id (FK)
…在这里我可以从Tbl1导航到Tbl2或Tbl3
或从Tbl2或Tbl3返回Tbl1
虽然需要从Tbl2或Tbl3到Tbl1的关联,但Tbl2或Tbl3中可能不存在记录;所以Tbl1记录应该能够与我们的Tbl2和Tbl3同时存在或同时存在
从Tbl1的角度来看,这种设计可以选择与两个完全不同的实体之间的关系
而且流利
modelBuilder.Entity<Tbl2>()
.HasRequired(e => e.Tbl1)
.WithOptional(e => e.Tbl2);
modelBuilder.Entity<Tbl3>()
.HasRequired(e => e.Tbl1)
.WithOptional(e => e.Tbl3);
使用上述方法,我得到一个错误:
依赖角色属性不是键属性,而是上限
依赖角色的多重性必须为“*”
这似乎意味着外键也必须是记录键
那么,我可以这样做吗?我不能吗
我很乐意使用attributes或fluent api或两者都实现。我认为您的ForeignKey属性需要引用一列,并放置在导航属性之上。e、 g:
[ForeignKey("Tbl1Id")]
public virtual Tbl1 tbl1 {get; set;}
即使在Tbl1到Tbl2和Tbl3上定义了导航属性,外键注释也应该在依赖类Tbl2和Tbl3中定义,而不是在主体类中定义
我不确定这是否能解决整个问题,但也许会有所帮助
祝您好运我认为您的ForeignKey属性需要引用一列并放置在导航属性之上。e、 g:
[ForeignKey("Tbl1Id")]
public virtual Tbl1 tbl1 {get; set;}
即使在Tbl1到Tbl2和Tbl3上定义了导航属性,外键注释也应该在依赖类Tbl2和Tbl3中定义,而不是在主体类中定义
我不确定这是否能解决整个问题,但也许会有所帮助
祝你好运就像其他类似问题一样;通过对依赖实体上的实体键和主体实体的外键使用相同的属性,可以实现一对一或零 我看不出另一种方法,因为在SQL中创建一对一或零需要外键具有唯一性约束,所以最终结果基本相同
就像其他类似问题一样;通过对依赖实体上的实体键和主体实体的外键使用相同的属性,可以实现一对一或零 我看不出另一种方法,因为在SQL中创建一对一或零需要外键具有唯一性约束,所以最终结果基本相同
看看这个问题。也许会有帮助。“.WithOptionalPrincipal…”子句有帮助吗?是的,我之前看到过。这将迫使表彼此具有int id,而不仅仅依赖于FK关系。它感觉很“yuk”,所以我想避免它。看看这个问题。也许会有帮助。“.WithOptionalPrincipal…”子句有帮助吗?是的,我之前看到过。这将迫使表彼此具有int id,而不仅仅依赖于FK关系。它感觉“yuk”,所以我想避免它。FK属性可以放置在导航属性上方并引用id属性,或者,它可以放置在引用导航属性的id属性上方。FK属性可以放置在导航属性上方并引用id属性,或者,它可以放置在引用导航属性的id属性上方。