首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每个导航属性一个类

每个导航属性一个类
EN

Stack Overflow用户
提问于 2019-12-31 16:23:44
回答 1查看 54关注 0票数 1

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

我已经使用Entity Framework6.4为我反向工程了类(代码优先风格,没有设计器)。

对于这个特定的表,它会生成如下代码:

代码语言:javascript
运行
复制
[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):

代码语言:javascript
运行
复制
[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; }
}

我如何才能做到这一点呢?(将字段放在基类中完全可以)。我不能为此更改数据库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-31 17:51:17

据我所知,实体框架不可能在dataContext中添加3个类作为一个table.But,您可以将其投影到3个classes.So中,您的代码将如下所示

代码语言:javascript
运行
复制
[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上下文类应该具有属性

代码语言:javascript
运行
复制
public MyDbContext: : DbContext
{
    public virtual DbSet<MyTable> MyTable{ get; set; }
}

然后,您可以添加投影类

代码语言:javascript
运行
复制
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; }
}

然后,您可以在存储库中添加基本查询投影

代码语言:javascript
运行
复制
   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 
                });
          }
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59541501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档