在哪里以及如何(代码示例会很棒)我可以从自动生成的类中删除业务逻辑,例如我的Model.edmx下的Customer.cs
当我在设计器中编辑某些内容然后保存更改EF更新类时,我需要输入例如默认值(我知道我可以在设计器中设置它们)。
public Customer()
{
this.Blocked = false;
this.Code = "#00000";
this.Contacts = new ObservableListSource<Contact>();
}
另外如何创建/在哪里放置一些基本的验证(this.Code不能为空字符串或null)?
感谢。
答案 0 :(得分:2)
实体框架生成的类标有partial
关键字,您可以扩展它们添加新文件并创建部分类的其他部分。这也可以防止在更新模型时覆盖您的更改。
也许更重要的是,EF为每个映射属性添加了一些部分方法,允许您添加自己的验证逻辑:
On
Property
Changing
- 包含在更改发生之前执行的代码,例如属性验证。值参数是 财产变化的价值。实现此方法 在属性发生变化之前验证它。防止改变 从被制造出来,你必须抛出异常。来自How to: Execute Business Logic During Scalar Property Changes 的
On
Property
Changed
- 包含在更改发生后执行的代码,例如记录更改。
你的部分课程应该是这样的:
public partial class Customer()
{
partial void OnCodeChanging(string value)
{
if(string.IsNullOrEmpty(value))
throw new InvalidOperationException ("value cannot be null or empty");
}
}
您必须确保它与EF创建的其他部分位于同一名称空间中。
答案 1 :(得分:1)
查看我正在处理的这个项目...... https://github.com/NickStrupat/EntityFrameworkCodeFirstTriggers
NuGet在...... https://www.nuget.org/packages/EntityFrameworkCodeFirstTriggers/
您可以输入实体持久化时执行的逻辑(SaveChanges()
)。
customer.Inserting += (sender, args) => ((Customer)customer).Code = "Some default";