2014-09-23 45 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