c# - 为模型类c#创建元数据类和分部类有什么用

标签 c# model-view-controller entity-framework-6 ado.net-entity-data-model

我刚加入一家新公司,我的经理也刚加入,他想改变我们编程的方式。基本上做他做的事。我想知道有什么区别、优点、缺点、限制和问题,如果有的话……这是示例

namespace Models //this is the model part of from edmx
{
using System;
using System.Collections.Generic;


public partial class MyModelClass
{
    public int ID { get; set; }
    public Nullable<System.DateTime> PostDate { get; set; }
    public string MyContent { get; set; }
}

}

这是元数据:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace Models
    {
         public class MyModelMetaData
         {
           //he wants all data annotation here
           public int ID { get; set; }
           public Nullable<System.DateTime> PostDate { get; set; }
           public string MyContent { get; set; }
         }
   }

这是局部的:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.Web;

    namespace Models
   {
        [MetadataType(typeof(MyModelMetaData))]
        public partial class MyModelClass or MyModelClassPartial
        {

           //He wants the programming algorithm to go here
       }
  }

请赐教。他想为每个模型类创建不同的元数据和部分类。涉及的文件太多了。

谢谢..我需要一个关于为什么的答案..如果你认为他的方法很好..我会这样做..但如果你认为这会在未来造成问题并且涉及更多编码..我需要知道

最佳答案

您显示的第一个类,即实体类,是在您每次保存 EDMX(或执行 T4 模板时)时从数据库中生成的。

这会导致重新生成 EDMX 下包含 public partial class MyClass 的文件。所以您不能更改它,因为下次有人刷新表格或添加表格时,您的更改将消失。

这就是实体类作为部分生成的原因:因此您可以为同一类创建另一个部分以在其中进行修改。

但是,如果你想用元数据注释你的实体的属性,你不能在另一个部分类中重新定义相同的属性:相同的名称只能由一个类型的一个成员使用。所以你不能这样做:

// Entity class
public partial class FooEntity
{
    public string Name { get; set;} 
}

// User-created partial class
public partial class FooEntity
{
    [Required]
    public string Name { get; set;} 
}

因为该代码表示​​您需要 FooEntity 类中的两个名为 Name 的属性,这是无效的。

因此您必须想出另一种方法来将元数据添加到类型中。输入 [MetadataType] 属性。这是通过创建一个类来实现的,该类具有与要注释的类相同的属性。在这里,使用反射,根据成员名称解析元数据。

所以当你为上面的注解创建元数据类时:

public class FooEntityMetadata
{
    [Required]
    public string Name { get; set;} 
}

您可以将其应用于用户创建的部分:

// User-created partial class
[MetadataType(typeof(FooEntityMetadata))]
public partial class FooEntity
{
}

而且,在后一部分中,您可以添加成员以向实体模型添加功能。例如,新的 ([NotMapped]) 属性和新方法。

关于c# - 为模型类c#创建元数据类和分部类有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41170474/

相关文章:

asp.net - 如何执行 EF Database.ExecuteSQLCommand 异步?

c# - 如何在 Entity Framework 6 代码优先方法中映射选择存储过程?

c# - .Net POCO 的线程安全吗?

c# - 将值数组四舍五入为 100%

c# - 迭代所有元素并获取文本?

C#新建进程窗口不隐藏

jsf - 何时对 Java JEE 项目使用客户端 Web 框架 [angularjs/bootstrap/backbone] 服务器端框架 [JSF/Struts/SpringMVC]

c# - 为 MVC 生成 Resx 文件

php - 模型逻辑和服务层逻辑

c# - Linq 外键 |如何只显示具有特定外键的元素?