我有一个更复杂的问题,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到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,EF6.2,Code,Server
我尝试过不同的注释,但一个常见的错误是:
Linker_LeftHand_Source::在关系'Linker_LeftHand‘中的角色'Linker_LeftHand_Source’中,多重性无效。因为依赖角色属性不是关键属性,因此依赖角色的多重性的上界必须是'*‘。 Linker_RightHand_Source::多重性在关系‘Linker_Linker_RightHand_Source’中的角色'Linker_RightHand_Source‘中无效。因为依赖角色属性不是关键属性,因此依赖角色的多重性的上界必须是'*‘。
与其他多重性答案不同的是中间链接器表。
发布于 2019-04-10 17:13:15
由于Entity Framework6.x不支持具有显式外键属性的one-to-one关系,如果尝试使用ForeignKey数据注释解决它,则在迁移过程中会出现多重性错误。
因此,唯一的解决方案是:从RightHandId模型类中删除Linker和LeftHandId属性,如下所示:
public class Linker
{
[Key]
public int LinkerId { get; set; }
public string PropertyC { get; set; }
public RightHand RightHand { get; set; }
public LeftHand LeftHand { get; set; }
}那么您的模型配置应该如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<LeftHand>().HasOptional(l => l.Linker)
.WithOptionalPrincipal(lf => lf.LeftHand)
.Map(lf => lf.MapKey("LeftHandId"));
modelBuilder.Entity<RightHand>().HasOptional(l => l.Linker)
.WithOptionalPrincipal(lf => lf.RightHand)
.Map(lf => lf.MapKey("RightHandId"));
}https://stackoverflow.com/questions/55617432
复制相似问题