I have an assembly with classes my domains - "Domains.dll". I dynamically add to my DbContext Dbset load classes of assembly.
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[] { });
}
}
}
Next, I create DataBase
context.Database.Create();
This works but with a problem for my domain. I have a class for the parent entity
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;}
}
If now I run a database - table 'Person' is not create.It creates a table 'Entities' with fields Id, FirstName, LastName.
If I change the Person
public class Person
{
public int Id {get; set;}
public string FirstName {get ;set;}
public string LastName {get ;set;}
}
then created in the database two tables - 'Person' and 'Entities'. How do I use inheritance? How do I do it right?
Try using [Table("Person")]
Attribute, and I encourage you to take a look at that Inheritance with EF Code First, It is a good post.
so to resume try this:
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;}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With