我通过将表格拖到edml的空设计器上来构建数据驱动模型。我知道我可以在我的模型周围建立一个datacontext,并且我可以像访问类一样访问每个表,但是每个模型的代码在哪里?
我问,因为我想在类本身的每个属性的setter上添加验证。
答案 0 :(得分:3)
在项目的根级别查找.dbml
文件。在该文件下,您将看到名为<someDB>.designer.cs
的文件。
但是,(并且您也会在设计器文件的顶部看到它),您真的不想对此文件中的类进行任何更改。
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
如果要添加内容,应该考虑创建扩展生成的类功能的Partial
类。
以下是我为处理验证而创建的示例部分类:
namespace ETL_Framework_UI
{
[MetadataType(typeof(DataObjectMD))]
public partial class DATA_OBJECT:IValidatableObject
{
public class DataObjectMD
{
[Required(ErrorMessage="The object name is required")]
[StringLength(50, ErrorMessage = "Name cannot exceed 50 characters")]
public string OBJECT_NAME { get; set; }
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
ETLDbDataContext db = new ETLDbDataContext();
var field = new[] { "OBJECT_NAME" };
var param = db.DATA_OBJECTs.SingleOrDefault(r => r.OBJECT_NAME == OBJECT_NAME && r.OBJECT_ID != OBJECT_ID);
if (param != null)
{
yield return new ValidationResult("Object name is already in use. ", field);
}
注意您的部分类必须在designer.cs
文件顶部所见的同一命名空间中定义。
答案 1 :(得分:3)
您不想自己编辑自动生成的类,如果您需要再次生成它们,这将导致巨大的问题。您希望使用具有DataAnnotations的分部类。这样,您的验证/额外规则将永远分离并更易于维护。
答案 2 :(得分:1)
如果您要添加验证,Entity Framework Code First可能是更好的解决方案。