[英]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.