繁体   English   中英

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

[英]EF code first relation many models to one model

我尝试将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
}

两个与File相关的模型

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; }
}

数据库示例:

文件表

ID____Model_ID___Type_ID

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

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

当我选择ID = 123的课程时,它将使用Type_ID 1的文件

知道如何映射吗?

通常,当您使用EF Code First机制时,考虑对象关系而不是表是一件好事。 但是,如果您真的想要将File类建模为存储在一个表中,则可以使用继承来实现它:

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

public class Lesson : File
{
}

public class Set : File
{
}

实体框架将使用其默认的Table Per Type继承策略来表示这些类。 但是,默认情况下,它将使用带有类名的text discriminator列而不是整数Type_ID列。 如果要更改此行为,则需要在上下文类中指定自己的Type属性映射:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM