实体框架:忽略列

entity-framework

我有一个数据库,我希望从中构建一个EF模型,但我不想包含数据库中的某些列,因为相关列只在服务器上维护,不应被任何应用程序操纵。

这两列都是DateTime(如果这有任何区别),其中一列可以为空,并且由更新时的触发器维护,另一列不可为空,并使用表定义中的默认值进行设置。

我想我正在寻找像Linq2Sql中的“Server Generated”选项;但我找不到这样的选择。

谁能告诉我如何解决这个问题?

警告:

我一直试图在我的工作地点引入业务对象建模多年,并且由于必须手动操作的附加代码量,它一直被拒绝。由于设计人员和代码生成,EF目前被视为一种可行的解决方案,因此任何涉及手动操作XML的选项都只会让我的其他同事远离EF。因此,我正在寻找可以使用设计器或使用代码完成的任务。

编辑:

我想这里我要找的是......

(a)创建模型的方法,不使用EF引用存储中的列(ssdl),因此不希望以任何方式操作它(b)在创建时以编程方式将“StoreGeneratedPattern”属性设置为属性的方法ObjectContext(简单的答案是在.ssdl中手动操作它,但是如果我从数据库中刷新模型,那么这将被覆盖,我无法沿着.csdl,.msl和.ssdl手动的路径走下去)。

热门答案

你能用Entity Framework做到这一点吗?是;这很简单。你能用Entity Framework设计师做到这一点吗?不幸的是,这要困难得多。

您遇到的问题是该列存在于EDMX中的存储架构(SSDL)中。使用GUI设计器删除列只是将其从客户端模式中删除,而不是映射或存储模式。但是,进入EDMX并删除它很简单。完成后,您还可以将其从EDMX的客户端架构部分中的映射中删除,实体框架将更长时间抱怨它未映射。

问题解决了吧?

好吧,不。使用GUI设计器从数据库更新EDMX时,将丢弃并重新生成存储架构。所以你的专栏会回来。据我所知,没有办法告诉GUI设计师永远不会映射特定的列。因此,每次使用GUI设计器进行更新时都必须重新执行此操作。幸运的是,EDMX是XML,因此您可以使用XML转换,LINQ或您选择的XML工具来完成此操作。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因