EDML生成模型的代码在哪里?

时间:2012-02-07 21:33:59

标签: c# sql-server linq

我通过将表格拖到edml的空设计器上来构建数据驱动模型。我知道我可以在我的模型周围建立一个datacontext,并且我可以像访问类一样访问每个表,但是每个模型的代码在哪里?

我问,因为我想在类本身的每个属性的setter上添加验证。

3 个答案:

答案 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的分部类。这样,您的验证/额外规则将永远分离并更易于维护。

Entity framework + validation annotation

答案 2 :(得分:1)

如果您要添加验证,Entity Framework Code First可能是更好的解决方案。