每个导航属性一个类



我正在尝试将EF6.4添加到现有代码库中(并删除NHibernate(。 其中一个表由多个其他表引用。

我使用实体框架 6.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个类,每个类有1个导航属性(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; }
}

我怎样才能做到这一点?(将字段放在基类中是完全可以的(。我无法为此更改数据库。

据我所知,实体框架在 dataContext 中不可能将 3 个类添加为一个表。但是您可以投影到三个类。所以你的代码看起来像

[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; }
}

所以你的数据库上下文类应该有属性

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 
});
}
}

相关内容

  • 没有找到相关文章