c# - Entity Framework (代码优先)——动态构建模型

标签 c# entity-framework dynamic model code-first

我有一个程序集,其中包含我的域类 - “Domains.dll”。我动态地添加到我的 DbContext Dbset 加载程序集类。

public class MyContext : DbContext
{
   public MyContext() : base("DBConnection"){}

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
       Assembly assembly = Assembly.LoadFrom("Domains.dll");
       var entityMethod = typeof(DbModelBuilder).GetMethod("Entity");
       var list = assembly.GetTypes().OrderBy(i => i.GetType().Name);
       foreach (Type item in list)
       {
           entityMethod.MakeGenericMethod(item)
     .Invoke(modelBuilder, new object[] { });
       }

   }
}

接下来,我创建数据库

context.Database.Create();

这有效,但我的域存在问题。我有一个父实体类

public abstract class Entity
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
}

public class Person : Entity
{
   public string FirstName {get ;set;}
   public string LastName {get ;set;}
} 

如果现在我运行一个数据库 - 未创建表“Person”。它会创建一个包含字段 Id、FirstName、LastName 的表“Entities”。

如果我改变了这个人

public class Person 
{
   public int Id {get; set;}
   public string FirstName {get ;set;}
   public string LastName {get ;set;}
} 

然后在数据库中创建了两个表 - 'Person' 和 'Entities'。我如何使用继承?我该怎么做才正确?

最佳答案

尝试使用 [Table("Person")] 属性,我鼓励您看一下 Inheritance with EF Code First , 这是一篇好文章。

所以要继续尝试这个:

public abstract class Entity
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
}
[Table("Person")]
public class Person : Entity
{
   public string FirstName {get ;set;}
   public string LastName {get ;set;}
} 

关于c# - Entity Framework (代码优先)——动态构建模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17879206/

相关文章:

c# - 在 Entity Framework Code First 中执行启用迁移时出错

Jquery - 更改动态下拉所选元素

c++ - 在 C++ 中使用 new 和二进制搜索进行动态内存分配

c# - 找不到类型或命名空间名称 'ProtoBuf'

c# - 在 WP7 上使用 Google oAuth

c# - 如何避免在 C# LINQ 中连续嵌套 .Any

entity-framework - EF 6数据库第一个: How to update stored procedures?

c# - 在 WPF 中查看 Word 文档

c# - 从 id 列表更新 Entity Framework 中的多行

java:使用变量的值作为对象名称(不是 eval() 方式)