13 validation entity-framework
我知道有一个AssociationChanged事件,但是,这个事件在关联之后触发.没有AssociationChanging事件.因此,如果我想为某些验证原因抛出异常,我该如何做并恢复原始值?
此外,我想基于来自其他实体的信息来默认我的实体的值,但只有在我知道有权插入数据库的实例时才这样做.如何区分它和实例化对象,因为它将基于现有数据填充?我应该知道吗?是否应该考虑我的实体业务逻辑之外的业务逻辑?
如果是这种情况,那么我应该设计控制器类来包装所有这些实体吗?我担心的是,如果我交还一个实体,我希望客户端能够访问这些属性,但是我想要对如何设置,默认等的验证保持严格控制.我看到的每个例子都引用了上下文,这是我的enity部分类验证之外,对吧?
顺便说一下,我查看了EFPocoAdapter并且因为我的生活无法确定如何在我的POCO课程中填充列表...任何人都知道我如何从EFPoco类中获取上下文?
关于你的第一个问题,我将简单地将对关联的更改实现为业务逻辑。例如,如果您添加一个包含多个学生的教师班级,请勿添加学生,例如
aTeacher.Students.Add(new Student)
相反,创建一个 AddStudent 方法
public Student AddNewStudent(string name, string studentID)
{
    Student s = new Student( name, studentID);
    s.Teacher = this; // changes the association
    return s;
}
这样您就可以完全控制关联何时更改。当然,是什么阻止其他程序员直接添加学生呢?在学生方面,您可以将教师设置器设置为私有(并更改构造函数以接受教师或类似的设置)。在教师方面,如何使学生集合不可插入?我不确定......也许将其转换为不接受插入的自定义集合。
关于问题的第二部分,您可能可以使用 OnVarNameChanging 事件。如果 EntityState 是“New”,那么您可以应用获取实际值的逻辑。
当您保存更改时还会触发一个事件(OnSavingChanges?),您可以使用该事件来确定哪些对象是新对象并设置一些值。
但也许最简单的解决方案是始终在构造函数中设置默认值,如果从数据库加载数据,它们将被覆盖。
祝你好运
| 归档时间: | 
 | 
| 查看次数: | 1961 次 | 
| 最近记录: |