所以我是MVC的新手,现在正在使用MVC3和实体框架。我目前正在使用Model / Schema 1st方法,因为数据库已经存在。因此,我创建了我的ADO.NET实体数据模型(.edmx),我在我的MVC应用程序中拥有所有需要的实体。到目前为止,这一切都很好。
但是,假设我的某个实体是“客户”实体。我可以在MyEntites.Designer.cs中看到自动生成的partial
类继承自EntityObject
。此时我想为我的MVC模型添加一些自定义业务逻辑。我觉得答案是使用我自己的partial
类在名为'Customer'的模型中创建。
在提出问题并查看有关POCO,T4模板,修改自动生成的代码等的各种信息之后,我做了很多搜索,并且丢失了。将我自己的业务逻辑和自定义代码添加到EF的自动生成实体是否是一种巨大的痛苦?我当然不想一遍又一遍地修改自动生成的代码。
我需要一个直接的解释,让众所周知的'灯泡'继续下去,然后我可以从那里起飞。有人可以帮我解答一下如何做到这一点吗?
谢谢!
答案 0 :(得分:2)
将您自己的类代码保存在不同的文件中,但使用相同的类和命名空间。这有助于避免代码被T4代码生成器覆盖。
Extending Entity Framework Generated Types
您还可以使用元类向生成的类添加属性:
答案 1 :(得分: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生成的课程相同。
通过这个,你的属性再也没有丢失......