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

本文关键字:父子 关系 框架 实体 | 更新日期: 2023-09-27 18:23:59

不确定是否有人能在这种复杂的情况下帮助我,希望一切顺利。我想知道继承是否是最好的方式,也许是其他方式。我一无所知。。。

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

在数据库中:

我有一个名为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);
        }
    }
}

文件类:

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

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

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

如果您想将[File]作为[Content]类中的类属性,只需将其添加到Content类(虚拟属性)中即可:

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

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

public virtual ICollection<File> Files

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