Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >需要帮助理解实体框架

需要帮助理解实体框架
EN

Stack Overflow用户
提问于 2021-09-22 12:15:15
回答 1查看 56关注 0票数 0

我的前任为人力资源部编写了一个web应用程序,从我们的人力资源管理系统中提取有关401 K贡献的数据。结果发现,他的报告只在捐款是一个确切的美元数额而不是一个百分比的情况下,才能弥补捐款的不足。他用实体框架来做这件事。我是个抄写员,不是程序员。我了解ADO。我不知道实体框架。

数据库有一个名为EARNED的列。追赶贡献金额,得到代码D03。追赶贡献百分比得到代码D03B。本专栏还有其他几个可能的值: D04、D31、E40等等。不知怎么的,他的报告只提取了D03行。它还需要提取D03B行。

如果我写的是SQL,那就像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * 
FROM [SageHRMS_900].[dbo].[UPCHKD] 
WHERE [EARNDED] = 'D03B' 
   OR [EARNDED] = 'D03'

显然实体框架不使用类似的东西。相反,我看到的只是这样的东西

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hrmsEntity hrms = new hrmsEntity(dbConnection);
var detail = hrms.TRP_ConDetail.ToList();

foreach (var line in hrms.TRP_ConDetail.ToList())
{
    fileData += line.Plan + line.RecordID + line.Date + line.SSN + line.Fund + line.LoanNum +
    line.Amount + line.Salary + line.SalaryType + line.ContType + line.StateTax + 
    line.LoanPayType + line.Filler01 + Environment.NewLine;
}

我知道在哪里定义了TRP_Con类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TRP_ConDetail
{
    [Key]
    public Guid ID { get; set; }
    public string Plan { get; set; }
    public string RecordID { get; set; }
    public string Date { get; set; }
    public string Name { get; set; }
    public string SSN { get; set; }
    public string Fund { get; set; }
    public string Desc { get; set; }
    public string LoanNum { get; set; }
    public string Amount { get; set; }
    public decimal Dollars { get; set; }
    public string Salary { get; set; }
    public string SalaryType { get; set; }
    public string ContType { get; set; }
    public string StateTax { get; set; }
    public string LoanPayType { get; set; }
    public string Filler01 { get; set; }
    public int? LineSq { get; set; }
}

我不明白的是,代码如何知道如何将选择限制在D03类型的贡献上。

编辑:添加hrmsEntity类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public partial class hrmsEntity : DbContext
{
    //public hrmsEntity()
    //    : base("name=hrmsEntityModelDSM")
    //{
    //}
    /*Base entity connection depends on the entity of the company*/
    public hrmsEntity(string dbConnection) : base($"name={dbConnection}") { }

    //public hrmsEntity(string connectionString) : base(connectionString) { }

    public virtual DbSet<TRP_ConSourceTotal> TRP_ConSourceTotal { get; set; }
    public virtual DbSet<TRP_ConDetail> TRP_ConDetail { get; set; }
    public virtual DbSet<TRP_MaintFile> TRP_MaintFile { get; set; }
}

UPCHKD是900数据库中的一个表。

@Dai评论:“也请(为了每个人的理智)使用IDE的重构重命名功能将hrmsEntity重命名为HrmsDbContext”是的.我不是程序员。)我编写VBA或PowerShell脚本。调整C#几乎是我能力的极限。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-22 13:04:09

第一步是查看TRP_ConDetail映射到何处/映射到什么位置,因为该名称中的任何内容都与UPCHKD表无关。由于除了[Key]之外,实体类中没有其他属性,所以要检查的两个位置将位于DbContext本身(hrmsEntity)中,用于OnModelCreating()方法,或者在EntityTypeConfiguration<TRP_ConDetail>类型的解决方案中寻找一个类,该类指示将该实体映射到数据库中的哪个表或视图。这还会显示指向已为类重命名的“已挣”列的任何属性。

如果您提到他的代码只是在拉"D03“值,我的预感是TRP_ConDetail是一个视图,因为在您粘贴的代码中没有过滤代码逻辑。该代码将实体映射到表或视图,并输出整个集合。数据库中可能有一个名为TRP_ConDetail的视图,在该视图中可以找到类似于WHERE UPCHKD.EARNED = 'D03'的内容,您可以将其扩展为包含"D03B“值。

但是,请记住,如果系统是这样实现的,那么这将是一个警告,这将是一个非常糟糕的设计,就好像您进行了更改一样--它将影响引用此TRP_ConDetail DbSet的任何地方。任何其他只期望使用D03的代码现在都将同时接收D03和D03B,因此这很可能会在系统的其他领域引入bug。应该避免底层视图中的筛选规则,除非它是非常核心的、全局应用的规则,正是出于这个原因。通常,您希望看到的是在Linq表达式中完成的过滤:

例如,如果视图简单地将该UPCHKD和一些相关数据组合在一起,比如“挣来的”字段是视图的一部分,那么代码中该区域的Linq查询看起来更像是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var detail = hrms.TRP_ConDetail
    .Where(x => x.Earned == "D03")
    .ToList();

本可以安全和容易地更新到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var detail = hrms.TRP_ConDetail
    .Where(x => x.Earned == "D03" || x.Earned == "D03B")
    .ToList();

不幸的是,它看起来并不是以这种方式实现的,因此很有兴趣看看为什么不这样做,以及EF是否真的被用来代替ADO.Net。

您应该与雇主谈谈如何让熟悉实体框架的开发人员仔细检查实现,以确认视图是否被使用,并通过可能更新基础视图或“修复”视图来识别任何风险,以便选择标准由EF而不是视图定义完成。(在任何引用视图的地方都会有流的效果来检查、修改和测试)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69290743

复制
相关文章
应用架构之择
企鹅号小编
2018/01/08
1.5K0
应用架构之择
择时荟萃(九):长周期的择时策略
择时荟萃第九篇,之前的报告多为短周期的择时,今天分享两个长周期的择时策略,一个是月频,一个是半年频,长短叠加效果更好。作者来自海外一家对冲基金。获取原文请在后台回复“择时9”。
量化小白
2023/03/19
2380
择时荟萃(九):长周期的择时策略
jquery在iframe中选中父元素节点
我们在使用如layui的layer弹窗或者在页面上用别的方式打开的iframe中可能会要获取到父页面的某个元素
阿超
2022/08/17
1.8K0
小程序拍摄或者在相册中选择图片
wx.chooseImage(Object object) :从本地相册选择图片或使用相机拍照。
德顺
2019/11/13
6210
因子择时【2】
摘要:尽管单一因子在长期时间内能够获得溢价,但它们在短时间内的回报是可变的。本文为三种不同类型---长期战略、部分战术、灵活战术的机构投资者提供了不同的因子配置方法,对于长期战略投资者,组合100%执行既定的战略配置计划,对于部分战术投资者,执行70%既定配置,30%灵活选择的因子配置方法;对于灵活战术的投资者,100%执行因子选择的配置方法。对于如何选择因子,本文通过考察1)宏观周期 2)因子动量 3)因子估值 4)市场情绪 四个方面在因子间进行选择。最后,本文还讨论了用这四个选择因子的方法在自下而上构造的组合和自上而下构造的组合表现。
量化小白
2021/05/08
1.1K0
因子择时【2】
择时荟萃(八):A股的日内动量择时
这篇报告和上一篇有一些相似,差异在于这篇以A股主要研究对象,使用16年的A股数据和3年的美股数据进行研究,更具有参考意义。
量化小白
2023/03/19
6070
择时荟萃(八):A股的日内动量择时
择时荟萃(三):择时策略的溢出效应
择时系列第三篇,分享一篇来自HSBC的一篇论文。作者讨论了趋势策略的溢出效应,并基于溢出效应构建交易策略,改进传统的择时策略。
量化小白
2023/03/19
4610
择时荟萃(三):择时策略的溢出效应
C#编写简单的聊天程序
这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固,同时希望能为初学的朋友提供一点参考。文章大体分为四个部分:程序的分析与设计、C#网络编程基础(篇外篇)、聊天程序的实现模式、程序实现。
张子阳
2018/09/30
1.6K0
C#编写简单的聊天程序
择时荟萃(一):综合季节性择时策略
看了很多文献,良莠不齐,决定新开一个系列,把其中高质量的内容分享出来,供大家参考。作为尝试,先以择时为主题,汇总近期看到的择时相关的好文章。
量化小白
2023/03/19
2700
择时荟萃(一):综合季节性择时策略
在DataGrid中选择,确认,删除多行复选框列表
在DataGrid中选择,确认,删除多行复选框列表 Selecting, Confirming & Deleting Multiple Checkbox Items In A DataGrid (i.e. HotMail & Yahoo) Introduction Although I don't have either a Hotmail or Yahoo email account, I do have friends that do, and I have o
阿新
2018/04/13
1.7K0
择时荟萃(五):周期转折点识别与择时(附源码)
择时系列第五篇,来自海外的一名Quant。作者构建了一个识别宏观经济周期转折点识别的模型,用于市场择时,在多个国家市场上验证均有效,并提供了部分源码。获取报告请在后台回复“择时5”。
量化小白
2023/03/19
3800
择时荟萃(五):周期转折点识别与择时(附源码)
Python数据分析之基情的择天记
專 欄 ❈ 罗罗攀,Python中文社区专栏作者 专栏地址: http://www.jianshu.com/u/9104ebf5e177 ❈ 人一生都可能无法逆天改命,但你却是要去奋斗一把。本文章
Python中文社区
2018/01/31
7610
Python数据分析之基情的择天记
python数据分析之基情的择天记
names用于存入小说人物和出场次数;relationships保存人物关系的有向边,该字典的键为有向边的起点,值为一个字典edge,edge的键是有向边的终点,值是有向边的权值,代表两个人物之间联系的紧密程度;linenames存入每行小说出现的人物;all_names是小说所有人物。
罗罗攀
2018/08/28
4320
python数据分析之基情的择天记
在计算机视觉项目中选择OpenCV还是MATLAB
科学计算依赖于执行用不同编程语言编码的计算机算法。计算机视觉就是这样一个跨学科的科学领域,通常简称为CV。计算机视觉被用来开发能够自动完成诸如获取、处理、分析和理解数字图像等任务的技术。它也被用来从现实世界中提取高维数据来产生符号信息。简单地说,计算机视觉使计算机能够像人类一样看到、理解和处理图像和视频。
小白学视觉
2020/02/20
4.4K0
在计算机视觉项目中选择OpenCV还是MATLAB
[Java 安全]消息摘要与数字签名
该文介绍了如何使用Java实现数字签名,包括DSA、RSA和ECDSA算法。文章还介绍了Java中的KeyPair和Signature类,以及如何使用这些类来实现数字签名和验证。
静默虚空
2018/01/05
1.1K0
[Java 安全]消息摘要与数字签名
C#实现QQ(高仿版)聊天窗口
TextBox:允许用户输入文本,并提供多行编辑和密码字符掩码功能; Button:当用户单击它时引发事件; Timer:按用户定义的间隔引发事件的组件
全栈程序员站长
2022/09/15
1.7K0
C#实现QQ(高仿版)聊天窗口
C#使用OpenCV剪切图片中的人物头像
首先创建一个Wpf项目——OpenCV_Face_Wpf,这里版本使用Framework4.7.2。
Kiba518
2021/03/02
1.3K0
C#使用OpenCV剪切图片中的人物头像
你也可以写个聊天程序 C# Socket学习
我们做软件工作的虽然每天都离不开网络,可网络协议细节却不是每个人都会接触和深入了解。我今天就来和大家一起学习下Socket,并写一个简单的聊天程序。
郑子铭
2023/08/30
3270
你也可以写个聊天程序 C# Socket学习
假如可以从认识的人中选一个,买入他今后一生10%的收入
有阵子我在想,如果我作为一个资本方,来投资我自己做一款游戏,作为“资本”的那个“我”会怎么做?
沙因Sign
2021/04/16
3470
假如可以从认识的人中选一个,买入他今后一生10%的收入
点击加载更多

相似问题

用三值条件运算符串联Python字符串

27

三值运算符条件语句不工作

20

三值条件运算符不返回true/false

11

F#中插值字符串中的三值条件运算符

16

(Javascript)三值运算符问题的多个条件集

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文