我有一个基类MyBase
,它是我的数据模型的一部分。我还有相关程序集中派生的类MyChild1
,MyChild2
。
我希望孩子们存储在数据库中并像MyBase
一样加载。另外,我不希望我的实体配置知道有关子类的任何信息。
有没有办法强制EF忽略该继承和仅用户基类?
提前致谢
答案 0 :(得分:0)
这是您的情况:
public abstract class BaseModel
{
public int Id { get; set; }
public string Name { get; set; }
}
public partial class Child1 : BaseModel
{
public string Name1 { get; set; }
}
public partial class Child2 : BaseModel
{
public string Name2 { get; set; }
}
我想您的数据应该像这样(我不确定您的详细信息要求,这里只是一个例子):
public partial class Example<T> where T: BaseModel
{
public int Id { get; set; }
public T Data { get; set; } // so here could be any Child of BaseModel
}
public partial class Example: Example<BaseModel>
{
}
这是示例代码:
public class MyDbContext : DbContext
{
public virtual DbSet<Example> Examples { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
//Let EFCore ignore all models that you don't want it to be a table
builder.Ignore<BaseModel>();
builder.Ignore<Child1>();
builder.Ignore<Child2>();
builder.Entity<Example>(entity =>
{
entity.Property(p => p.Data).HasConversion(
x => JsonConvert.SerializeObject(x) //convert TO a json string
, x => JsonConvert.DeserializeObject<BaseModel>(x)//convert FROM a json string
);
});
}
}