【发布时间】:2019-09-01 04:48:31
【问题描述】:
我有一个更复杂的问题here
但我想我会简化它。
这是我的虚拟类(基于的结构来自 NDC,所以我无法控制它):
public class RightHand
{
[Key]
public int RightHandId { get; set; }
public string PropertyA { get; set; }
[Required]
public virtual Linker Linker { get; set; }
}
public class LeftHand
{
[Key]
public int LeftHandId { get; set; }
public string PropertyB { get; set; }
[Required]
public virtual Linker Linker { get; set; }
}
public class Linker
{
[Key]
public int LinkerId { get; set; }
[ForeignKey("RightHand")]
public int RightHandId { get; set; }
[ForeignKey("LeftHand")]
public int LeftHandId { get; set; }
public string PropertyC { get; set; }
[Required]
public virtual RightHand RightHand { get; set; }
[Required]
public virtual LeftHand LeftHand { get; set; }
}
我已经尝试了很多东西,所以希望这个简化的版本可以帮助别人帮助我。
总的来说,我想搜索:
- LeftHand.PropertyB 并查看 RightHand 的属性
- 另外,我想搜索 RightHand.PropertyA 并查看 Left Hand 的属性
总而言之,我不关心链接器,除非它是将 LeftHand 链接到 RightHand。 LeftHand 和 RightHand 是一对一的。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<RightHand>()
.Property(x => x.RightHandId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<LeftHand>()
.Property(x => x.LeftHandId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<Linker>()
.Property(x => x.LinkerId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<Linker>()
.HasRequired(nus => nus.LeftHand)
;
modelBuilder.Entity<Linker>()
.HasRequired(nuu => nuu.RightHand)
;
}
谢谢,我正在使用 VS2017、EF 6.2、Code First、SQL Server
我尝试了不同的注释,但一个常见的错误是:
Linker_LeftHand_Source::多重性在关系“Linker_LeftHand”中的角色“Linker_LeftHand_Source”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是'*'。
Linker_RightHand_Source::多重性在关系“Linker_RightHand”中的角色“Linker_RightHand_Source”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是'*'。
这里与其他多重性答案不同的是中间链接器表。
【问题讨论】:
-
错误信息是什么?
-
@TanvirArjel 添加了错误信息
-
@vivek 只是因为我收到相同的错误消息并不一定意味着相同的原因。
-
@GinaMarano 请看我的回答!我已经解释过了并给出了解决方案。
标签: c# entity-framework code-first ef-code-first-mapping