我正在使用数据库第一种方法与实体框架,当我以前在默认模板上工作时,数据库表使用ObjectContext进行映射,所以我习惯于创建#partial classes& [MetadataType(typeof)应用数据注释,但是当我开始使用Dbcontext代码生成模板映射数据库表时,我发现它将在我的Model区域中创建.tt文件夹,我发现我可以申请数据注释直接到.cs类本身,而不需要像objectcontext case 那样创建部分类。 目前数据注释工作正常,但我的方法会导致我不知道的问题,我应该创建部分类,因为我曾经使用Objectcontext ? BR
答案 0 :(得分:6)
通常,您不应编辑生成的代码,因为您所做的更改将在重新生成时被覆盖。这就是大多数发生器发出部分类的原因。
您的情况的最佳做法是在解决方案中使用另一个部分类声明创建一个新文件。在该文件中,将MetadataType
属性添加到类中,并将属性级验证属性添加到“buddy”类(属性中引用的类)。这允许您在生成的属性上使用验证属性,如果模型/数据库发生更改,您仍然可以重新生成模型类而不会丢失它们。
例如,您的新文件可能如下所示:
[MetadataType(typeof(PersonMetadata))]
partial class Person
{
// Add logic to the generated class in here.
public string FullName
{
get { return FirstName + " " + LastName; }
}
}
class PersonMetadata
{
// Add attributes to the generated properties in here.
[Required]
public string FirstName { get; set; }
}
答案 1 :(得分:0)
创建相同的部分类来定义元数据,或者您可以使用Entity Framework Power Tools对现有数据库进行反向工程,以便拥有POCO类。然后,您可以使用流畅的API(您将看到它为您添加的验证)而不是数据注释,以便为您提供服务器端验证。
如果您想要客户端,那么您仍然可以将它们应用于您的模型,因为每次编译时它们都不会重新生成。
但是 - 我建议您创建ViewModels并使用AutoMapper在EF对象和视图模型之间进行映射。然后,您可以将注释直接应用于ViewModel。
答案 2 :(得分:0)
我对您的情况的理解是您将Database-First样式反向设计为Code-First样式。如果您的上下文类继承自DbContext,那么您现在处于Code-First样式(除非有一些奇怪的混合可能,我不知道!)。
在代码优先,实际上没有必要为数据注释创建部分类,IMO。