【发布时间】:2015-02-18 19:20:43
【问题描述】:
在一个旧的 WPF 项目中,我有一个具有如下属性的类:
private string _name = "";
public string Name
{
get { return _name; }
set
{
string cleanName = clsStringManip.CleanText(value, true);
if (cleanName != _name)
{
_name = cleanName;
}
}
}
每次名称更改时,我都会确保该值是“清理”的。将它放在属性中可以确保我永远不会忘记在对象上设置属性之前清理字符串。
现在我正在使用 MVC5 和使用 DatabaseFirst 的 EntityFramework6.1 重新创建这个系统。
所以所有属性都是由 EF 自动生成的。那么如何在不编辑自动生成代码的情况下将等效的 CleanText 函数添加到我的属性中呢? - 因为我下次更改数据库并重新同步时会丢失这些更改。
我只能通过 Google 找到一种通过 MetadataType 和部分类添加数据注释的方法,但这并不能回答我的问题。
我尝试将上述代码添加到部分类中,但收到错误:
类型 XXX 已包含名称的定义
我能想到的唯一方法是创建一堆 SetProperty() 函数,但这很脏,你永远无法确保其他开发人员(或我自己)会记得使用它们。
【问题讨论】:
-
什么版本的 EF?代码优先、模型优先还是数据库优先?
-
嗨 EF 6.1,MVC 5,数据库优先
-
您可以考虑使用代码优先。我认为修改 t4 代码生成模板来进行如此深刻的更改并不是一个好主意。
-
我首先考虑的是代码,但我的数据库是一个庞大的数据库,而且由于我是 MVC 和 EF 的新手,不幸的是我并没有真正掌握学习曲线的时间表。深奥是什么意思? - 你将如何实现相同类型的事情?
-
将默认生成自动属性更改为这些受保护的设置器是相当重要的。您必须在许多地方修改 t4 模板(例如,还生成成员变量),并且可能只针对选定的属性。使用 CF,这要容易得多。您可以从数据库中创建 CF 模型以开始使用。
标签: c# asp.net-mvc entity-framework entity-framework-6