如何与Entity Framework保持Parent-Child C#关系

时间:2014-09-23 12:29:08

标签: c# entity-framework inheritance relationship

不确定是否有人可以在这种复杂的情况下帮助我,希望能有所帮助。 我想知道继承是否是最好的方式,也许是别的东西。我很无能......

我应该如何设置类之间的关系?

在数据库中:

我有一个名为tbl_contents的表,其中包含:

Int ContentId PK
Int ContentTypeId
Varchar ContentName

我有一个名为tbl_files的表格,其中包含:

Int FileId PK
Varchar Path

我已将FileId作为ContentId的外键,因此他们实际上共享了PK。

在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);
        }
    }
}

文件类:

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 

现在,为了解决Content类,我只需选择一个LINQ查询并获取tbl_contents实体。  例如:

tbl_contents _dbContent = _dbContext.tbl_contents.Find(5) 

现在,我从ContentType知道这是一个文件,我想从文件实体中获取Path。我可以从_dbContent.tbl_files.Path获得,但我希望它成为File类的一部分。从db获取实体后,我可以构造Content类: Content content = new Content(_dbContent);

1 个答案:

答案 0 :(得分:0)

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

如果您希望[File]作为[Content]类中的类属性,只需在Content类(虚拟属性)中添加它:

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

如果您遵循惯例,EF将找到关系。这适用于一对一的关系。 对于1对N关系,添加虚拟集合属性。

public virtual ICollection<File> Files

并在File类中添加FK属性(例如:public int ContentId { get; set; }