Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用实体框架保持父子C关系_C#_Entity Framework_Inheritance_Relationship - Fatal编程技术网

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

C# 如何用实体框架保持父子C关系,c#,entity-framework,inheritance,relationship,C#,Entity Framework,Inheritance,Relationship,不确定是否有人能在这种复杂的情况下帮助我,希望一切顺利。 我想知道继承是否是最好的方式,也许是别的方式。我不知所措 我应该如何设置类之间的关系 在数据库中: 我有一个名为tbl_contents的表,它有: Int ContentId PK Int ContentTypeId Varchar ContentName Int FileId PK Varchar Path 我有另一个名为tbl_文件的表,它有: Int ContentId PK Int ContentTypeId Varchar

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

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

在数据库中:

我有一个名为tbl_contents的表,它有:

Int ContentId PK
Int ContentTypeId
Varchar ContentName
Int FileId PK
Varchar Path
我有另一个名为tbl_文件的表,它有:

Int ContentId PK
Int ContentTypeId
Varchar ContentName
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知道这是一个文件,我想从文件实体获取路径。我可以从_dbContent.tbl_files.Path获取,但我希望它是文件类的一部分。从db获取实体后,我可以构建内容类:
内容内容=新内容\u数据库内容

您是将CodeFirst还是DatabaseFirst模型与EF一起使用

如果要将[File]作为[Content]类中的类属性,只需将其添加到Content类虚拟属性中:

    public int FileId { get; set; }
    public virtual File File { get; set; }
如果您遵循约定,EF将找到关系。这适用于1对1关系。 对于1对N关系,请添加虚拟集合属性

公共虚拟ICollection文件


并在文件类中添加一个FK属性,例如:public int ContentId{get;set;}

我首先使用数据库和EF。正如您所提到的,数据层是映射的,我只是想知道在业务层中最好的方法是什么。如果您首先使用数据库,那么将为您生成模型。不用自己写了我想。。。业务层是根据业务逻辑的需要而设计的。不需要遵循域模型,但这只是保存实体的层。如果我有一个业务层,我应该如何保存它?可以与生成的类相同,除非您需要其他东西。无法用您在问题中提供的信息说明如何进行业务层。这取决于您将如何在前端使用它。如果不需要转换,只需使用domainmodel类。只有在域类不合适的情况下,或者您希望展平某些关系以便于显示或其他情况下,才添加业务逻辑。我有数据层实体:tbl_contents,tbl_files和两个业务层类:Content,File now,为了处理内容类,我可以选择一个LINQ查询并获取tbl_contents实体。例如:tbl_contents _dbContent=_dbContext.tbk_contents.Find5现在,我从ContentType知道这是一个文件,我想从文件实体获取路径。我可以从_dbContent.tbl_files.Path获取,但我希望它是文件类的一部分。从数据库中获取实体后,我可以构造Content类:Content Content=newcontent\u dbContent;