【问题标题】:One to one EF relationship一对一的EF关系
【发布时间】:2020-11-07 10:26:57
【问题描述】:

我有一个如下所示的数据库:

其中 TableA 是主体,TableB 是从属。

我正在尝试使用实体框架在数据库中创建这种关系。从 TableB 到 TableA 的连接有效,但反之则不行(TableA 到 TableB)。

public partial class TableA
{
    [Key]
    public long id { get; set; }
    public virtual TableB tableB { get; set; }
}

public partial class TableB
{
    [Key]
    public long id { get; set; }
    public long TableA_ID { get; set; }
    public string value { get; set; }   
    [ForeignKey("TableA_ID")]   
    public virtual TableA tableA { get; set; }
}

每次我得到错误:

因为依赖角色属性不是关键属性,所以依赖角色的多重性的上限必须是'*'

或错误:

必须使用关系流式 API 或数据注释显式配置此关联的主体端

我尝试在public virtual TableA tableA 上方的TableB 和其他地方添加[Required],但似乎没有任何效果。

你能帮我建立这样的关系吗(如果可能,只使用数据注释)?

【问题讨论】:

  • 你是否在DbContextOnModelCreating()覆盖中定义了这个关系?
  • 我没有在 OnModelCreating 中定义它。但我知道我可以使用数据注释来做到这一点?
  • 什么版本的 EF?在 EF6 中,如果外键是实体键,则只能有 1-1 关系。
  • 是的,6. 所以我不能用当前的数据库设置来做到这一点?我怎样才能让它工作?
  • 把Table_B到Table_A的FK做成PK,或者在EF里干脆让它成为一对多的关系。

标签: c# entity-framework .net-core


【解决方案1】:
DataSet ds = new DataSet(); 
ds.Tables.Add(TableA);
ds.Relations.Add("TableB", TableA.Columns["id"], TableB.Columns["TableA_ID"]);
ds.Relations["TableB"].Nested = true;

如果我理解正确的话。你可以试试这个。

【讨论】:

  • 如果可能,我只想使用数据注释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2021-07-21
  • 2019-07-25
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多