entity-framework - 为什么在 EF Code First 中经常无法解释地使用部分修饰符?

标签 entity-framework ef-code-first

在 EF Code first 文档和示例中,您会经常看到使用 partial 修饰符定义的类和方法。 For example , 以下

public partial class Department
{
    public int DepartmentID { get; set; }
    public DepartmentNames Name { get; set; }
    public decimal Budget { get; set; }
}

我了解 C# 编译器对 partial 关键字的一般用法。但是,我经常看到这些示例没有应用该功能(即,该类永远不会在其他地方重新打开)。

在其他示例中,我还看到了方法上的 partial 修饰符。

这些修饰符在 EF Code First 上下文中是否具有某些特殊含义?谁能帮助我了解发生了什么?

最佳答案

鉴于 EF 使使用 POCO 变得非常容易,这使得它在分离组件和片段方面变得灵活。例如,定义模型的部分:

public partial class PurchaseOrder
{
    public Int32 ID { get; set; }
    public String CustomerName { get; set; }
    public Double InvoiceAmount { get; set; }
    public virtual ICollection<PurchaseOrderItem> Items { get; set; }
}

然后在别处应用业务逻辑:

public partial class PurchaseOrder : IValidatableObject
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        // ...
    }
}

也许还可以在另一个地方扩展它的功能:

public partial class PurchaseOrder
{
    public void AddItem(PurchaseOrderItem item)
    {
        // ...
    }
}

虽然作为@E.J. Brennan 提到,它们更有可能是从 T4 模板生成的。这意味着您在生成的文件中所做的任何操作都将在每一代中被删除;但是,如果您单独留下生成的项目,您仍然可以扩展它(就像我用 IValidatableObject 或其他方法展示的那样)而不用担心您的更改是否会丢失。

关于entity-framework - 为什么在 EF Code First 中经常无法解释地使用部分修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17686120/

相关文章:

c# - 如何通过 T4 自动化为每个实体生成我的所有实体组成的两个表

entity-framework - 是否有通用方法来测试数据库中是否存在对象?

c# - Entity Framework 5 - 派生类的基于枚举的鉴别器

entity-framework - 您如何确保首先对 EF 代码中的表关系启用级联删除?

entity-framework - 如何从 EF5 Code First 中的分隔 ID 列表返回实体

entity-framework - Entity Framework 和并行性

asp.net-mvc - Entity Framework LINQ 在多个列上连接 5 个表(不可能?!)

c# - Entity Framework - 项目列表未加载

c# - 我是否需要在表示层中添加对 EntityFramework.SqlServer 的引用?

c# - 我可以使用Entity Framework版本6或7自动更新对象及其子对象吗?