1

所以我是 MVC 的新手,现在正在使用 MVC3 和实体框架。由于数据库已经存在,我目前正在使用模型/模式第一种方法。因此,我创建了我的 ADO.NET 实体数据模型 (.edmx),并且在我的 MVC 应用程序中拥有所有需要的实体。到目前为止,这一切都很好。

但是,假设我的一个实体是“客户”实体。我可以看到自动生成的partial类继承自EntityObjectMyEntites.Designer.cs。此时我想向我的 MVC 模型添加一些自定义业务逻辑。自然地,我相信答案是使用我自己partial在名为“客户”的模型中创建的类。

在问这个问题之前我做了很多搜索,看到关于 POCO、T4 模板、修改自动生成的代码等的各种信息,我迷路了。将我自己的业务逻辑和自定义代码添加到 EF 自动生成的实体中是不是很痛苦?我当然不想一遍又一遍地修改自动生成的代码。

我需要一个直截了当的解释来让众所周知的“灯泡”亮起来,然后我就可以从那里起飞了。有人可以帮我回答如何做到这一点吗?

谢谢!

4

2 回答 2

2

将您自己的类代码保存在不同的文件中,但使用相同的类和命名空间。这将有助于避免您的代码被 T4 代码生成器覆盖。

扩展实体框架生成的类型

您还可以使用元类向生成的类添加属性:

向生成的类添加属性

于 2012-05-10T14:32:50.793 回答
2

这些代码是自动生成的,并将在每次模型更新或更改时被覆盖。

您可以通过扩展模型来实现您所需要的。假设 EF 为您生成了以下实体类:

namespace YourSolution
{
    using System;
    using System.Collections.Generic;

    public partial class News
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }        
        public int UserID { get; set; }

        public virtual UserProfile User{ get; set; }
    }
}

并且您想要做一些工作来保留您的数据注释和属性。因此,请按照以下步骤操作:

首先,在某个地方(无论你想要什么,但最好是在Models)添加两个类,如下所示:

namespace YourSolution
{
    [MetadataType(typeof(NewsAttribs))]
    public partial class News
    {
         // leave it empty.
    }

    public class NewsAttribs
    {            
        // Your attribs will come here.
    }
}

然后将您想要的属性和属性添加到第二类 -NewsAttribs这里。:

public class NewsAttrib
{
    [Display(Name = "News title")]
    [Required(ErrorMessage = "Please enter the news title.")]
    public string Title { get; set; }

    // and other properties you want...
}

笔记:

1)生成的实体类的命名空间和你的类必须相同——这里YourSolution

2)您的第一个类必须partial并且其名称必须与 EF 生成的类相同。

经历这个,你的属性再也不会丢失了......

于 2013-07-24T12:39:52.470 回答