4

ASP.NET MVC2对在实体上使用属性(验证和扩展Html助手类等)提供了强大的支持。向自动生成的实体添加属性的最佳方式是什么(使用VS2010和EF4)

如果我使用VS2010 EF4实体数据模型(edmx及其cs类)从数据库生成我的模型,并且我想在某些实体上添加属性 。最佳做法是什么?我应该如何应对更新模型(向数据库中添加更多字段/表格并将它们合并到edmx中) - 它会保留我的属性还是生成一个新的cs文件来擦除所有内容?

(此文件的手动更改可能会在 应用导致 意外行为。)

(如果代码 再生这个 文件的手动更改将被覆盖。)

回答

4

通常您会创建所谓的partial classes来扩展自动生成的对象。

+0

但我怎么上的字段已经在实体添加属性?这不是重新定义吗? – Dani 2011-01-06 20:48:43

0

我们使用部分类,但如果您需要持久化并由EF处理,“从数据库更新模型”选项是您最好的朋友。

1

随着“好友类”的概念,上面链接,以及数据注释我用这个方法extention。我忘了自己在哪里,对原作者如此赞赏。

我们使用它像

List<ValidationResult> errorList = new List<ValidationResult>(); 
     bool bValid = client.IsValid<Client, ClientMetadata>(ref errorList, false); 


    public static bool IsValid<T, U>(this T obj, ref List<ValidationResult> errors, bool validateAllProperties = true) where T : IValidatableObject 
    { 
     //If metadata class type has been passed in that's different from the class to be validated, register the association 
     if (typeof(T) != typeof(U)) 
     { 
      TypeDescriptor.AddProviderTransparent(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(T), typeof(U)), typeof(T)); 
     } 

     var validationContext = new ValidationContext(obj, null, null); 
     var validationResults = new List<ValidationResult>(); 
     Validator.TryValidateObject(obj, validationContext, validationResults, validateAllProperties); 

     errors = validationResults; 

     if (validationResults.Count > 0) 
      return false; 
     else 
      return true; 
    } 
相关问题