【问题标题】:Where is the code for the EDML generated Models?EDML 生成模型的代码在哪里?
【发布时间】:2012-02-08 05:44:12
【问题描述】:

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

我问是因为我想为类本身的每个属性的设置器添加验证。

【问题讨论】:

    标签: c# sql-server linq


    【解决方案1】:

    在项目的根目录中查找.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 文件顶部看到的相同命名空间中。

    【讨论】:

    • 这将是我第一次使用部分类。伙计,那里有一些我从未见过的代码!
    • 那里有一些很酷的东西。查看右侧的这些 PluralSight 视频:asp.net/mvc。它有一些关于验证和其他 MVC 概念的精彩教程
    • 感谢您的链接。这是我第一次看到使用“产量”。什么意思!?
    • MSDN 更擅长解释我会是 :msdn.microsoft.com/en-us/library/9k7k7cf0.aspx
    【解决方案2】:

    您不想自己编辑自动生成的类,如果您需要再次生成它们,这将导致巨大的问题。您想改用带有 DataAnnotations 的部分类。这样,您的验证/额外规则将永远分开并且更易于维护。

    Entity framework + validation annotation

    【讨论】:

    • 非常感谢您的链接。我不知道存在这样的事情,现在我知道 Rondel(上图)在他的示例中所说的一些代码。
    【解决方案3】:

    如果您要添加验证,也许 Entity Framework Code First 是一个更好的解决方案。

    【讨论】:

    • 你能解释一下为什么吗?我一直想知道为什么我应该选择实体而不是 linq to sql。我知道 ltos 更适合 sql server 环境。
    • 我也很想知道为什么。我不知道有任何常用的验证系统在 L2S 和 EF 上都不能很好地工作。
    • 不需要部分类。你拥有所有在一个地方。更多关于 EF 代码优先的优势weblogs.asp.net/scottgu/archive/2010/07/16/…
    • @MegaHerz 天才。这正是我所希望的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2021-03-29
    相关资源
    最近更新 更多