c# - Entity Framework : foreign keys for many-to-many relations

标签 c# entity-framework-6

我对多对多关系的导航属性有疑问。 正如我在 MSDN 上阅读的那样,有一个选项可以将 ForeignKey 属性定义为导航属性。现在我想将此功能用于多对多关系,但我无法让它工作。

我正在使用 EF 6.1.3。

我的类(class):

public class Class1
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [ForeignKey(nameof(Class2s))]
    public ICollection<Guid> Class2Ids { get; set; }

    [ForeignKey(nameof(Class2Ids))]
    public ICollection<Class2> Class2s { get; set; }

    [ForeignKey(nameof(Class3))]
    public Guid Class3Id { get; set; }

    public Guid Class3 { get; set; }
}

public class Class2
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [ForeignKey(nameof(Class1s))]
    public ICollection<Guid> Class1Ids { get; set; }

    [ForeignKey(nameof(Class1Ids))]
    public ICollection<Class1> Class1s { get; set; }
}

public class Class3
{ 
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; } 
}

导航属性已加载但 id 集合保持为空的问题。

public static void Main(string[] args)
{
    using (SomeContext context = new SomeContext())
    {
        var classes = context.Classe1Set
            .Include(c => c.Class2s)
            .Include(c => c.Class2s)
            .First();

        classes.Class3;     // filled with correct object
        classes.Class3Id;   // filled with correct guid

        classes.Class2s;    // is filled with 2 elements
        classes.Class2Ids;  // problem: is Empty List
    }
}

我做错了什么?

编辑:更新类以更好地表示问题。多对多连接在数据库端正确创建。问题只是属性 Class1Ids 没有正确填写,而 Class3Id 可以。

感谢您的帮助。

最佳答案

您不需要 ForeignKey 属性 - 将从类型中推断出关系。
Class1IdsClass2Ids不要指向另一个实体,不是导航属性,也不能由 EF 自动加载。
要得到你想要的,你应该像这样定义 IDs 属性
public ICollection<Guid> ClassXIds { get { return ClassXs.Select(c => c.Id).ToList(); } } .这不会从数据库加载数据,只是从导航属性中提取 ID。

关于c# - Entity Framework : foreign keys for many-to-many relations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42926787/

相关文章:

c# - 具有多个参数的类构造函数

c# - 在同一项目(SQL Server 和 MySql)中使用具有多个数据库和提供程序的 Entity Framework

c# - 两个不同数据库的 Entity Framework 代码优先迁移

entity-framework - 为什么在 Entity Framework 6中仍未实现ON DELETE SET NULL?有障碍吗?

javascript - 使用 Javascript 将 blob 转换为 .doc、.docx、.xls 或 .txt 以在浏览器中查看而无需下载

c# - 用 ReSharper 将所有 `!stuffs.IsEmpty()' 替换为 `stuffs.Any()'

c# - 删除 RadGrid 中的第 11 行使其变为空白

entity-framework - 将数据库优先迁移到代码优先 - 从发布切换到迁移

entity-framework - 如何在执行 entityframework.bulkinsert 时插入父子?

c# - 输出错误。我的随机数在哪里?