Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6.1.1编码第一个一对零/一关系_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

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属性上方。