在哪里放置函数和验证代码实体框架

时间:2014-01-20 21:44:22

标签: c# .net entity-framework

在哪里以及如何(代码示例会很棒)我可以从自动生成的类中删除业务逻辑,例如我的Model.edmx下的Customer.cs

当我在设计器中编辑某些内容然后保存更改EF更新类时,我需要输入例如默认值(我知道我可以在设计器中设置它们)。

public Customer()
{
    this.Blocked = false;
    this.Code = "#00000";
    this.Contacts = new ObservableListSource<Contact>();
}

另外如何创建/在哪里放置一些基本的验证(this.Code不能为空字符串或null)?

感谢。

2 个答案:

答案 0 :(得分:2)

实体框架生成的类标有partial关键字,您可以扩展它们添加新文件并创建部分类的其他部分。这也可以防止在更新模型时覆盖您的更改。

也许更重要的是,EF为每个映射属性添加了一些部分方法,允许您添加自己的验证逻辑:

  

On Property Changing - 包含在更改发生之前执行的代码,例如属性验证。值参数是   财产变化的价值。实现此方法   在属性发生变化之前验证它。防止改变   从被制造出来,你必须抛出异常。

     

On Property Changed - 包含在更改发生后执行的代码,例如记录更改。

     来自How to: Execute Business Logic During Scalar Property Changes

你的部分课程应该是这样的:

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";