繁体   English   中英

如何使用实体框架保持父子C#关系

[英]How to hold Parent-Child C# relationship with Entity Framework

不确定在这种复杂情况下是否有人可以帮助我,希望能取得成功。 我想知道继承是否是最好的方法,也许还有其他方法。 我无能为力...

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

在数据库中:

我有一个名为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知道这是一个文件,并且我想从文件实体获取路径。 我可以从_dbContent.tbl_files.Path获得,但我希望它成为File类的一部分。 从数据库中获取实体后,我可以构造Content类: Content content = new Content(_dbContent);

您是否将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; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM