我正在尝试将EF6.4添加到现有的代码库(并删除NHibernate)。其中一个表被多个其他表引用。
我已经使用Entity Framework6.4为我反向工程了类(代码优先风格,没有设计器)。
对于这个特定的表,它会生成如下代码:
[Table("MyTable")]
public partial class MyTable
{
public Guid Id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
// Navigation properties
public virtual TypeA A { get; set; }
public virtual TypeB B { get; set; }
public virtual TypeC C { get; set; }
}
我更希望(与现有的NHibernate代码相匹配) MyTable是3个类,每个类都有一个导航属性(MyTableA、MyTableB、MyTableC):
[Table("MyTable")]
public partial class MyTableA
{
public Guid Id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
// Navigation properties
public virtual TypeA A { get; set; }
}
[Table("MyTable")]
public partial class MyTableB
{
public Guid Id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
// Navigation properties
public virtual TypeB B { get; set; }
}
[Table("MyTable")]
public partial class MyTableC
{
public Guid Id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
// Navigation properties
public virtual TypeC C { get; set; }
}
我如何才能做到这一点呢?(将字段放在基类中完全可以)。我不能为此更改数据库。
发布于 2019-12-31 09:51:17
据我所知,实体框架不可能在dataContext中添加3个类作为一个table.But,您可以将其投影到3个classes.So中,您的代码将如下所示
[Table("MyTable")]
public partial class MyTable
{
public Guid Id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
// Navigation properties
public virtual TypeA A { get; set; }
public virtual TypeB B { get; set; }
public virtual TypeC C { get; set; }
}
因此,db上下文类应该具有属性
public MyDbContext: : DbContext
{
public virtual DbSet<MyTable> MyTable{ get; set; }
}
然后,您可以添加投影类
public class BaseTable
{
public Guid Id { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
}
public class MyTableA: BaseTable
{
// Navigation properties
public virtual TypeA A { get; set; }
}
然后,您可以在存储库中添加基本查询投影
public class MyTableRepository
{
private IQueryable<MyTableA> tableAEntities;
public MyTableRepository(MyDbContext dbContext)
{
tableAEntities = dbContext.MyTable.Select(t =>
new MyTableA
{
Id = t.Id,
Field1 = t.Field1,
Field2 = t.Field2,
A = t.A
});
}
}
https://stackoverflow.com/questions/59541501
复制