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);
我尝试在 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);