【问题标题】:Entity Framework - One-way one-to-one relation实体框架 - 单向一对一关系
【发布时间】:2017-10-06 03:32:25
【问题描述】:

我需要在两个表之间建立一对一的关系,但只能是单向的。

[Accounts]
account_id  
name  
etc...

[SalesReps]
sales_rep_id  
account_id
account
etc...

所以,我希望 SalesReps 表与 Accounts 有关系,但我不希望 Accounts 有对 SalesReps 的引用。

我试过这个:

modelBuilder.Entity<sales_rep>()
.HasRequired(a => a.account)
.WithMany()
.HasForeignKey(a => a.account_id);

但这给了我:

sales_rep_account_Source::多重性在关系“sales_rep_account”中的角色“sales_rep_account_Source”中无效。因为从属角色引用了关键属性,所以从属角色的多重性的上限必须是'1'。

【问题讨论】:

  • 您有与您的 SalesReps 表关联的角色吗?
  • 请提供相关实体模型的相关部分(C# 代码 - 类、属性而不仅仅是名称)。本质上是minimal reproducible example.

标签: entity-framework


【解决方案1】:

执行此操作的方式是使用 WithRequiredDependent() 配置。您的实体将是:

public class Account
{
  public int Id { get; set; }
  public string Name { get; set; }
}

public class SalesRep
{
  public int Id { get; set; }
  public Account Account { get; set; }
}

在 OnModelCreating() 方法中你应该这样做:

modelBuilder.Entity<Account>().HasKey(x => x.Id);
modelBuilder.Entity<SalesRep>().HasKey(x => x.Id);
modelBuilder.Entity<SalesRep>().HasRequired(x => x.Account).WithRequiredDependent().Map(x => x.MapKey("AccountId"));

【讨论】:

    【解决方案2】:

    事实证明,我所要做的就是:

    modelBuilder.Entity<sales_rep>()
                .HasRequired(a => a.account)
                .WithOptional();
    

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 2015-05-04
      相关资源
      最近更新 更多