ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – Entity Framework 6首先将多个表转换为一个外键关系代码

2019-07-03 12:52:59  阅读:100  来源: 互联网

标签:c sql entity-framework ef-code-first


我想知道是否有人可以建议我如何在EF6中首先使用代码完成以下操作

如果我将Table_3作为List添加到Table_1&我的实体中的表_2. EF会自动为Table_3中的两个表生成外键列,而不是识别它们属于同一类型.

我的模型类设置如下.

public interface IParent
{
    int ID { get; set; }
    List<Table_3> Children { get; set; }
}

public class Table_1 : IParent
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual List<Table_3> Children { get; set; }
}

public class Table_2 : IParent
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual List<Table_3> Children { get; set; }
}

public class Table_3
{
    [Key]
    public int ID { get; set; }
    public int ParentID { get; set; }
    [ForeignKey("ParentID")]
    public virtual IParent Parent { get; set; }
}

EF代码首先生成以下内容

编辑

只是为了让任何有同样问题的人知道

我现在通过将IParent接口更改为抽象类来解决此问题
我的课程现在如下所示

[Table("ParentBase")]
public abstract class ParentBase
{
    [Key]
    public int ID { get; set; }
    public List<Table_3> Children { get; set; }
}
[Table("Table_1")]
public class Table_1 : ParentBase
{
    public string Name { get; set; }
}
[Table("Table_2")]
public class Table_2 : ParentBase
{
    public string Name { get; set; }
}
[Table("Table_3")]
public class Table_3
{
    [Key]
    public int ID { get; set; }
    public int ParentID { get; set; }
    [ForeignKey("ParentID")]
    public virtual ParentBase Parent { get; set; }
}

与表安排

如果能够满足原件的要求会更好.

解决方法:

我也有这个问题,我从一开始就使用抽象类而不是接口.
我的问题是我的table_3有两个导航属性:
一个是公共虚拟Table_1,另一个是公共虚拟Table_2,然后EF只是配置了这些额外的外键列,
我将两个导航属性合并为一个
public virtual parentbase {get; set;}.然后它奏效了.希望这可以帮助.

侧注,建议在公共列表子项上添加虚拟关键字{get;组;在parentbase类中,因为在前面的示例中,它已经是这样了.

感谢发布这个,我也遇到了这个问题.

标签:c,sql,entity-framework,ef-code-first
来源: https://codeday.me/bug/20190703/1366740.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有