2012-02-07 17 views
2

我已經建立了一個數據驅動模型,將我的表拖到edml的空設計器上。我知道我可以在我的模型周圍建立一個數據環境,並且可以像訪問類一樣訪問每個表,但每個模型的代碼在哪裏?EDML生成模型的代碼在哪裏?

我問,因爲我想添加驗證到每個屬性的類的setter本身。

回答

3

在項目的根級查找.dbml文件。在該文件下,您將看到一個名爲<someDB>.designer.cs的文件。但是,(你也可以在設計器文件的頂部看到這個),你並不想對這個文件中的類做任何改變。

//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 

如果你想添加,你應該考慮創建Partial類,擴展生成的類的功能。

這裏是我創建來處理我的驗證的樣本部分類:你的部分類必須在你在你designer.cs文件的頂部看到同一個命名空間中定義

namespace ETL_Framework_UI 
{ 
[MetadataType(typeof(DataObjectMD))] 
public partial class DATA_OBJECT:IValidatableObject 
{ 

    public class DataObjectMD 
    { 
     [Required(ErrorMessage="The object name is required")] 
     [StringLength(50, ErrorMessage = "Name cannot exceed 50 characters")] 
     public string OBJECT_NAME { get; set; } 

    } 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     ETLDbDataContext db = new ETLDbDataContext(); 
     var field = new[] { "OBJECT_NAME" }; 
     var param = db.DATA_OBJECTs.SingleOrDefault(r => r.OBJECT_NAME == OBJECT_NAME && r.OBJECT_ID != OBJECT_ID); 
     if (param != null) 
     { 
      yield return new ValidationResult("Object name is already in use. ", field); 
} 

注意。

+0

這將是我第一次使用分部類。那裏有一些代碼,我從來沒有見過! – 2012-02-07 21:47:04

+1

這裏有一些非常酷的東西。查看右側的這些PluralSight視頻:http://www.asp.net/mvc。它有關於驗證和其他MVC概念的一些很棒的教程 – Rondel 2012-02-07 21:58:25

+0

感謝您的鏈接。這是我第一次看到「收益率」被使用。這是什麼意思!? – 2012-02-07 22:02:52

3

你不想自己編輯自動生成的類,如果你需要再次生成它們,這將導致巨大的問題。你想用DataAnnotations來代替部分類。這樣您的驗證/額外規則將永遠分開,並且更易於維護。

Entity framework + validation annotation

+1

謝謝很多鏈接。我不知道存在這樣的事情,現在我知道在他的例子中,Rondel(上面)所說的一些代碼。 – 2012-02-07 22:04:42

1

如果你要添加驗證也許實體框架代碼首先是一個更好的解決方案。

+0

你能解釋一下爲什麼嗎?我總是想知道爲什麼我應該選擇實體而不是sql。我知道ltos對於sql server環境更好。 – 2012-02-07 21:50:04

+1

我很想知道爲什麼。我不知道任何經常使用的驗證系統與EF一樣不適用於L2S。 – 2012-02-07 21:55:29

+1

不需要部分類。你擁有一個地方。更多關於EF代碼的優點http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx – 2012-02-07 22:17:26