我尝试将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; }
}
数据库示例:
文件表
ID ____ MODEL_ID ___ TYPE_ID
1 ----------- 123 ------------- 1
2 ----------- 123 ------------- 2
当我选择ID = 123的课程时,它将使用Type_ID 1
的文件知道如何映射吗?
答案 0 :(得分:0)
通常,当您使用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);