EF 代码首先将多个模型关联到一个模型

EF code first relation many models to one model

我尝试在 Entity framework 中将 2 个模型关联到 1 个模型 代码首先是这样的:

一个模型: 看评论

public class File
{
    public int ID { get; set; }
    public int Model_ID { get; set; } // The id of the models
    public int Type_ID { get; set; } // When value is 1 its relate Lesson when 2 relate to Set
}

涉及文件的两个模型

public class Lesson
{
    public int ID { get; set; }
    public virtual File File { get; set; }
}

public class Set
{
    public int ID { get; set; }
    public virtual List<File> Files { get; set; }
}

数据库示例:

文件Table

ID____Model_ID___Type_ID

1------------123------------1

2------------123------------2

当我 select 课程 ID = 123 时,它将使用 Type_ID 1

的文件

知道如何映射吗?

通常,当您使用 EF Code First 机制时,最好考虑对象关系而不是 tables。但是如果你真的想将你的文件 class 建模为存储在一个 table 中,你可以通过使用继承来实现它:

public abstract class File
{
    public int ID { get; set; }
    public int Model_ID { get; set; } 
}

public class Lesson : File
{
}

public class Set : File
{
}

Entity framework 将使用其默认的 Table Per Type 继承策略来表示那些 classes。但是默认情况下,它将使用名称为 class 的文本鉴别器列,而不是整数 Type_ID 列。如果您想更改此行为,您需要在您的上下文 class:

中指定您自己到类型 属性 的映射
public class EntityFrameworkContext : DbContext
{
    public DbSet<File> Files { get; set; }
    public DbSet<Lesson> Lessons { get; set; }
    public DbSet<Set> Set { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<File>().Map<Lesson>(m => m.Requires("Type_ID").HasValue(1))
            .Map<Set>(m => m.Requires("Type_ID").HasValue(2));
    }
}

所以现在这样的代码将选择您的记录 Type_ID = 1

context.Lessons.Select(lesson => lesson.Model_ID == 123);