我有使用带有 DbFirst 模型的 EF 的项目。需要调整实体的某些属性以适应项目的需要。我通过手动编辑 .edmx Designer 文件来做到这一点。这些调整是较小的字符串操作。问题是:每次从数据库更新模型时,这些更改都会被覆盖。还有另一种方法可以做到这一点吗?
问问题
86 次
4 回答
0
根据您想要做的事情,EF 为您提供了很多“钩子”,因此您可以添加自定义代码,而不是在设计器中。所有的类都是部分的,所以你可以创建一个部分类,然后如果想改变设置器,可以挂接到 OnYourPropertyNameChanging。
摘自我的一些代码:
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[DataMemberAttribute()]
public global::System.String EmployeeComment
{
get
{
return _EmployeeComment;
}
set
{
OnEmployeeCommentChanging(value);
ReportPropertyChanging("EmployeeComment");
_EmployeeComment = StructuralObject.SetValidValue(value, true);
ReportPropertyChanged("EmployeeComment");
OnEmployeeCommentChanged();
}
}
private global::System.String _EmployeeComment;
partial void OnEmployeeCommentChanging(global::System.String value);
partial void OnEmployeeCommentChanged();
因此,如果您想在更改方法中执行自定义逻辑,您可以声明一个部分类,并将您的代码如下:
public partial class Comment
{
partial OnEmployeeCommentChanging(string value)
{
/* your code goes here */
}
}
于 2012-09-07T15:13:56.120 回答
0
这是正确的,当您从数据库更新模型时,它会被刷新。您需要创建一个单独的类,您可以在其中定义实体并对其进行自定义。
于 2012-09-07T14:57:13.570 回答
0
不是真的,除了从数据库中进行修改以使这些更改保持停滞,否则在模型更新时创建一个事件,以便每次更新模型时,您的设置都会得到加强。
于 2012-09-07T14:38:50.847 回答
0
其他两个答案涵盖了您需要的大部分内容。
您的实体模型都构建为部分类。每次对数据库执行任何操作时,都会更改类定义。这就是为什么他们都有标题说不要更改此代码!
假设您有一个数据项目,我在同一个项目中创建新类。所以如果你的模型是
partial class Customer:EntityObject
然后您将创建一个定义为的 CustomerOverload 类库
partial class Customer
然后该类将包含您的添加等。只是不要添加方法,这些方法不会传递给客户端。
于 2012-09-07T15:12:49.693 回答