Cyb*_*nja 2 c# model-view-controller ado.net-entity-data-model entity-framework-6
我刚加入一家新公司,我的经理也加入了,他想改变我们的计划方式.基本上做他做的事.我想知道有什么区别,优点,缺点,限制和问题,如果有任何......那就是样本
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是元数据:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是部分的:
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
}
}
Run Code Online (Sandbox Code Playgroud)
请开明我.并且他想为每个模型类创建不同的元数据和部分类..所涉及的文件太多.
谢谢..我需要一个答案,为什么..如果你认为他的方法很好..我会这样做..但如果你认为这将在未来引起问题,更多的编码将涉及..我需要知道
每次保存EDMX时(或执行T4模板时),您显示的第一个类(实体类)都是从数据库生成的.
这会导致public partial class MyClass重新生成EDMX下包含的文件.因此,您无法更改它,因为下次有人刷新表或添加一个表时,您的更改就会消失.
这就是为什么实体类是作为部分生成的:所以你可以创建另一个部分到同一个类来进行修改.
但是,如果要使用元数据注释实体的属性,则无法在其他分部类中重新定义相同的属性:同一名称只能由一个类型的成员使用.所以你不能这样做:
// 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;}
}
Run Code Online (Sandbox Code Playgroud)
因为该代码表示您需要Name在FooEntity类中命名的两个属性,这是无效的.
因此,您必须提出另一种方法来向该类型添加元数据.输入[MetadataType]属性.这通过创建一个与要注释的类具有相同属性的新类来工作.这里,使用反射,基于成员名称解析元数据.
因此,当您为上述注释创建元数据类时:
public class FooEntityMetadata
{
[Required]
public string Name { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
您可以将其应用于用户创建的部分:
// User-created partial class
[MetadataType(typeof(FooEntityMetadata))]
public partial class FooEntity
{
}
Run Code Online (Sandbox Code Playgroud)
而且,在后一部分中,您可以添加向实体模型添加功能的成员.例如,New([NotMapped])属性和新方法.
| 归档时间: |
|
| 查看次数: |
3850 次 |
| 最近记录: |