EF Core 映射关系及取数据(急等高手)

佛祖的木鱼 2019-07-15 12:57:24
我现在准备用EF Core从现有的数据库里取数据出来,有三张表:

其中,一个JobHeader可以包含多个JobOperation,关联键是JobNum, 同样的一个JobOperation,可以包含多个OprTransactions,关联键是JobNum+OpCode

请问我怎样用EF Core来定义映射关系并取值呢?

public class JobHeader
{
[Key]
public string JobNum { get; set; }
public string PartNum { get; set; }
}

public class JobOperation
{
[Key]
public int Id { get; set; }
public string JobNum { get; set; }
public string OpCode { get; set; }

}

public class OprTransactions
{
[Key]
public int Id { get; set; }
public string JobNum { get; set; }
public string OpCode { get; set; }
public string TransType { get; set; }
}

希望取值的内容如下:

{
"jobNum": "000025172-0009",
"partNum": "CIB-75-00024KT-A",
"JobOperation": [
{
"jobNum": "000025172-0009",
"opCode": "NF01",
"OprTransactions": [
{
"id": 1,
"jobNum": "000025172-0009",
"opCode": "NF01",
"transType": "OPRSTART",
},
{
"id": 2,
"jobNum": "000025172-0009",
"opCode": "NF01",
"transType": "OPREND",
}
]
},
{
"jobNum": "000025172-0009",
"opCode": "NF34",
"OprTransactions": [
{
"id": 3,
"jobNum": "000025172-0009",
"opCode": "NF34",
"transType": "OPRSTART",
}
]
}
]
}
...全文
6899 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小强清风 2021-03-31
  • 打赏
  • 举报
回复
这不就是多对多的关系吗
jhonsonzhang 2021-03-28
  • 打赏
  • 举报
回复
定义dbcontext啊,你想怎么取,就怎么取!取不出来再把代码虚心贴出来,我还是有那么一点小信心的,高手多的是,具体都是代码说话,什么映射关系都是多余的,你取数据时候用linq lamada进行相应操作就可以了。
qq_35340878 2021-01-05
  • 打赏
  • 举报
回复
用单个表,得到每个表数据在用匿名方式拼接数据
叫我 Teacher 周 2019-08-16
  • 打赏
  • 举报
回复
EF 里有一种特殊的设计叫做导航属性。
佛祖的木鱼 2019-07-23
  • 打赏
  • 举报
回复
你这只是定义了映射关系,并没有告之如何取数据哦。。。
d383137359 2019-07-19
  • 打赏
  • 举报
回复
你这个简单

public class JobHeader
    {
        [Key]
        public string JobNum { get; set; }
        public string PartNum { get; set; }
        public virtual List<JobOperation> JobOperations{get;set;}
    }

    public class JobOperation
    {
        [Key]
        public int Id { get; set; }
        public string JobNum { get; set; }
        public string OpCode { get; set; }
        public virtual List<OprTransactions> OprTransactions{get;set;}
    }

    public class OprTransactions
    {
        [Key]
        public int Id { get; set; }
        public string JobNum { get; set; }
        public string OpCode { get; set; }
        public string TransType { get; set; }
    }

//然后你最后把 JobHeader.toJson();就是你上面那个结果了
佛祖的木鱼 2019-07-16
  • 打赏
  • 举报
回复
多谢回复。感觉应该不复杂,只是平常较少用EF Core.....
XBodhi. 2019-07-15
  • 打赏
  • 举报
回复
我格式 其实不太喜欢 这种方式,虽然快捷。因为可读性比较差。
XBodhi. 2019-07-15
  • 打赏
  • 举报
回复
EF 不是特别熟悉。不过我觉得 DbContext 里有 Entity 的感念,你可以用 EntityConnection 和 EntityCommand 来看看,然后重写 CreatingModel 和 CreatingTable ,你可以 LINQ TO SQL 的方式来序列化下看看。

因为写的比较少。也不太喜欢这种方式。所以 平时很少用。

给你个帖子推荐下 https://www.cnblogs.com/libingql/p/4052906.html

佛祖的木鱼 2019-07-15
  • 打赏
  • 举报
回复
坐等高手啊 等到答案就结贴!
内容概要:本文深入探讨了ASP.NET CoreEFCore的实体属性配置方法及DbContext的核心用法,旨在帮助开发者高效管理数据模型与数据库交互。首先介绍了两种实体属性配置方式:数据注解和Fluent API。数据注解适用于简单场景,通过特性直接在实体类上声明配置;Fluent API则提供更灵活的方式,在DbContext的OnModelCreating方法中进行配置,适合复杂场景。接着详细解析了DbContext的定义、生命周期管理、数据操作及性能优化。DbContext作为EFCore的核心,负责数据库连接、查询、事务管理等,通过依赖注入管理其生命周期,默认为作用域(Scoped)。数据操作包括Add()、Remove()和SaveChangesAsync()等方法。性能优化方面,提出了AsNoTracking()和DbContext池的概念。最后讨论了高级配置,如多对多关系、继承映射和全局过滤器,并分享了最佳实践与常见问题,如配置方式的选择、线程安全、迁移和性能陷阱。 适合人群:具备一定ASP.NET CoreEFCore基础的开发人员,尤其是希望深入了解数据层开发的中级开发者。 使用场景及目标:①理解并掌握EFCore的两种属性配置方式及其应用场景;②熟练使用DbContext进行数据库连接、查询、事务管理和性能优化;③掌握高级配置技巧,如多对多关系、继承映射和全局过滤器;④避免常见的性能陷阱,提高数据层开发效率。 阅读建议:本文内容详实,涵盖从基础到高级的多个方面,建议读者在学习过程中结合实际项目进行实践,特别关注配置方式的选择和性能优化技巧,确保理论与实践相结合。

8,493

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧