2013-07-26 3 views
3

У меня есть сборка с классами моих доменов - «Domains.dll». Я динамически добавляю в классы загрузки DbContext Dbset сборки.Entity Framework (первый код) - динамическое построение модели

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» не create.It создает таблицу «объекты» с полями Id, FirstName, LastName.

Если я изменить человека

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

затем в базе данных создается две таблицы - «Персона» и «Сущности». Как использовать наследование? Как мне это сделать правильно?

+0

Я знаю, что эта нить очень старый! Но у вас возникла эта проблема? ** С автоматической обновлением базы данных? ** – Flo

ответ

4

Попробуйте использовать атрибут [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;} 
} 
+0

Это работа. Спасибо Вам большое. – FetFrumos

Смежные вопросы