2014-09-23 103 views
0

不確定是否有人可以幫助我在這種複雜的情況下,希望好。 我想知道繼承是最好的方法,也許是別的。我無言以對...如何保持父子C#與實體框架的關係

我應該如何設置類之間的關係?

在數據庫:

我有一個叫tbl_contents表有:

Int ContentId PK 
Int ContentTypeId 
Varchar ContentName 

我有另一個表稱爲tbl_files有:

Int FileId PK 
Varchar Path 

我已經FileId作爲外交關鍵到ContentId,所以他們實際上分享PKs。

在C#代碼:

public class Content 
{ 
    public enum ContentTypes 
    { 
     File = 1 
    }  

    protected tbl_contents _content; 

    public int ContentId 
    { 
     get 
     { 
      return _content.ContentId; 
     } 
    } 

    public string ContentName 
    { 
     get 
     { 
      return _content.ContentName; 
     } 
    } 

    public ContentTypes ContentType 
    { 
     get 
     { 
      return (ContentTypes)Enum.ToObject(typeof(ContentTypes), _content.ContentTypeId); 
     } 
    } 
} 

File類:

public class File 
{  
    protected tbl_files _file; 

    public int FileId 
    { 
     get 
     { 
      return _file.FileId; 
     } 
    } 

    public string Path 
    { 
     get 
     { 
      return _file.Path; 
     } 
    } 
} 

編輯:

我有數據層實體:

tbl_contents, tbl_files 

個兩個業務層類:

Content, File 

現在,爲了解決內容類我只能選擇一個LINQ查詢,並得到tbl_contents實體。 例如:

tbl_contents _dbContent = _dbContext.tbl_contents.Find(5) 

現在,我從ContentType的知道,這是一個文件,我想從文件實體的路徑。我可以從_dbContent.tbl_files.Path得到,但我希望它成爲File類的一部分。從數據庫獲取實體後,我可以構建內容類: Content content = new Content(_dbContent);

回答

0

您是否在EF上使用CodeFirst或DatabaseFirst模型?

如果你希望你的[文件]中[內容]類的類屬性,只需在內容類(虛擬財產)補充一點:

public int FileId { get; set; } 
    public virtual File File { get; set; } 

如果您遵循公約,EF會找到關係。這適用於1對1關係。 爲1對N關係添加虛擬集合屬性。

public virtual ICollection<File> Files

,並在文件類(例如:public int ContentId { get; set; }

+0

我第一次使用數據庫與EF添加FK屬性。 DataLayer被映射爲你所提到的,我只是想知道如果你正在使用DatabaseFirst,那麼在業務層 – Bergkamp 2014-09-23 12:50:30

+0

中做什麼是最好的方法,那麼將爲你生成模型。沒有必要自己寫,我想...業務層是業務邏輯所需要的。不需要遵循域模型 – 2014-09-23 12:58:34

+0

正確,但那只是持有實體的層。 如果我有一個業務層,我應該如何執行它? – Bergkamp 2014-09-23 12:59:29