[英]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.