背景: EDMX是直接构建的,我只是选择了所有的表,并点击了"确定"按钮好几次,问题是,并不是所有的列都会被系统消耗。
发生了什么 后来,几个很好的列变成了"kiss good-bye"列,砰的一声,几个停止运行的组件作为异常从实体框架中抛出,上面写着"无效列名xxxxx">
想要实现的目标 希望stackoverflow的传奇大师们能善意地阐明"如何让EF忽略未使用的列,即使它们已经不在DB中了"。
系统设计有时需要一些空间。因此,所有候选列都可能在一段时间后不再使用,但DB First方法会考虑所有候选列,MS有可能想出某种策略来忽略未使用的属性,而且实现这种机制的复杂性和成本似乎不是很高。
在《追随》中,我尝试了一些事情,但没有成功,也许这是我尝试的方式,或者这不是扭转局面的方法。
方法#1在我这边尝试过
以更具体的列方式实现数据加载,表1.选择(第1、2、3、4列(;为什么我放弃了它:它太多了,我无法重写,所以我甚至没有验证它是否解决了问题。
方法#2在我这边试过
为什么我放弃它:它就是不起作用
方法#3
默认值=">
为什么我放弃了它:它就是不起作用,仍然有"无效列名"异常
#4
Database.Set初始化
为什么我放弃了它:它不起作用
如果数据库架构发生更改,则需要在Designer中更新EDMX模型。在空白处单击鼠标右键,然后单击"从数据库更新模型…"。每次架构更改时都需要执行此操作。
经过一段时间的研究,现在我有了一些变通方法,但我还没有任何解决方案。
-
将Data Contract注入EDMX调用中,以便EF只检索上层所需的列。优点:希望这是一次两鸟直接前进,使用数据合约和EDMX模式之间的映射器进行EF调用。缺点:Perf是一个令人担忧的问题,希望最新版本的反射不会占用太多的CPU跨度,而且实现必须大量才能覆盖所有EF调用。
-
设置单元测试用例
步骤从DLL资源节检索当前使用的EDMX,从数据库检索最新的EDMX。如果实际值与预期值不匹配,请通知开发团队中的EDMX所有者。
预期结果即时导出EDMX
实际结果从DLL资源部分导出的现有EDMX
希望这能有所帮助。