【问题标题】:Having a List of the same object in Entity Framework [duplicate]在实体框架中拥有相同对象的列表 [重复]
【发布时间】:2017-02-10 02:06:15
【问题描述】:

我正在使用 Entity Framework 设计代码触发迁移,并且当一个对象具有与其自身相同类型的 List 时会出现一些问题。假设我有一个User 对象,它的List<User> 作为它的Friends

public class User
{
    [Key]
    public int UserId { get; set; }

    // some other stuff

    public List<User> Friends { get; set; }
}

问题是 EF 为用户寻找外键,并在找不到任何外键时尝试创建一个:

AddColumn("dbo.Users", "User_UserId", c => c.Int());

我试图避免同时使UserId 成为键和外键,那么这里有什么好的做法?

【问题讨论】:

  • UserId 不能是外键,它是一对多的关系。您需要一个单独的用户好友表,其中包含将用户 ID 与其好友 ID 连接起来的条目。
  • 您需要为好友和用户提供单独的表格。在您的情况下,实体框架正试图找出建立关系的外键。它从同一个表中找到唯一主键的 UserId。你无法避免它。

标签: c# entity-framework foreign-keys relational-database


【解决方案1】:

最好是单独的表。

名称:用户朋友 PK:用户朋友ID FK:用户 ID FK:朋友ID

【讨论】:

    【解决方案2】:

    您不能将List&lt;T&gt; 用于实体框架中的相关集合。必须是virtual ICollection&lt;T&gt;

    【讨论】:

    • 尝试了虚拟ICollection,得到了同样的结果
    • 这不是真的。您可以使用List&lt;T&gt;。我不是说它是推荐的,但它是可能的。而且它必须是虚拟的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多