2012-12-05 113 views
0

我是新的所有實體框架模型和數據綁定。 我創建了一個接口,並從db中的我的Candidate表中生成了一個模型類。僅綁定接口屬性的數據

public interface ICandidate 
{ 
    String ID { get; set; } 
    string Name { get; set; } 
    string Mail { get; set; } 
} 

我創建了一個局部類到生成Candidate模型,所以我將能夠實現ICandidate接口而不改變任何生成的代碼。

public partial class Candidates : ICandidate 
{ 
    string ICandidate.ID 
    { 
     get { return this.PK; } 
     set { _PK = value; } 
    } 
    string ICandidate.Name 
    { 
     get{ return this._Name; } 
     set { _Name = value; } 
    } 
    string ICandidate.Mail 
    { 
     get { return this._Email; } 
     set { this._Email = value; } 
    } 
} 

當然,生成的類具有比接口更多的屬性(如IsDeleted字段,不需要接口)。

我想顯示在DataGridView所有的數據庫的候選人。但我希望只有界面的屬性會顯示爲DataGridView中的列。

  1. 有沒有辦法只綁定接口的屬性DataGridView?
  2. 在我的數據庫中有一個名爲Candidate_To_Company的表,其中包含以下列: PK,Candidate_FK,Company_FK,Insertion_Date 我想將此表綁定到DataGridView。但不是顯示Candidate_FK,我想從ICandidate顯示候選名稱。這可能嗎?

回答

0

有沒有一種方法只綁定接口的屬性DataGridView?

兩個選擇:

  1. 明確設立在DataGridView列而不是讓它們自動生成。根據我的經驗,我通常從自動生成的列開始,然後找到爲什麼我需要明確設置列(格式化,順序等)的一些原因。
  2. 創建一個只有這些屬性並從您的實體轉換的模型類可以手動或使用像AutoMapper這樣的工具將該類別轉換爲該模型。

在我的數據庫中有一個名爲Candidate_To_Company表...我想從ICandidate顯示候選名稱。這可能嗎?

既然你有比外鍵等欄目,EF將不會映射,作爲許多一對多的關係,因爲你添加的PK設置爲你導航性能(在不必要恕我直言)和InsertDate將在您的模型中不可用。

再次,幾個選項:

  1. 如果您創建了問題1一個獨立的模型,從實體模型建立在模型和地圖的導航屬性向視圖模型通過中間表去:

    Company.Candidates = efCompany.Candidate_to_Companies.Select(cc=>cc.Candidate).ToList();

  2. 圖如何告訴模型使用中間表爲多到很多中間表,而不是其自己的實體。這假定DB通過觸發器和/或IDENTITY列自動填充這些列,因此不需要在實體模型中包含它們。

  3. 刪除PK和InsertionDate列,生成模型,然後添加額外的列。這實際上有點駭人聽聞,如果您需要重新生成模型,可能會給您帶來問題。我只做這個實驗來看看如何去做#2。