首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建立实体框架时的多重冲突

建立实体框架时的多重冲突
EN

Stack Overflow用户
提问于 2019-04-10 16:36:16
回答 1查看 635关注 0票数 1

我有一个更复杂的问题,here

但我想我会简化它。

下面是我的虚拟类(它所基于的结构来自NDC,因此我无法控制它):

代码语言:javascript
复制
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上搜索并查看左手的属性

总之,我不关心链接器,只是链接LeftHand到RightHand。LeftHand和RightHand是一对一的.

代码语言:javascript
复制
    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‘中无效。因为依赖角色属性不是关键属性,因此依赖角色的多重性的上界必须是'*‘。

与其他多重性答案不同的是中间链接器表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-10 17:13:15

由于Entity Framework6.x不支持具有显式外键属性的one-to-one关系,如果尝试使用ForeignKey数据注释解决它,则在迁移过程中会出现多重性错误。

因此,唯一的解决方案是:从RightHandId模型类中删除LinkerLeftHandId属性,如下所示:

代码语言:javascript
复制
public class Linker
{
    [Key]
    public int LinkerId { get; set; }
    public string PropertyC { get; set; }

    public RightHand RightHand { get; set; }
    public LeftHand LeftHand { get; set; }
}

那么您的模型配置应该如下所示:

代码语言:javascript
复制
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"));
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55617432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档