不确定是否有人可以在这种复杂的情况下帮助我,希望能有所帮助。 我想知道继承是否是最好的方式,也许是别的东西。我很无能......
我应该如何设置类之间的关系?
在数据库中:
我有一个名为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);
答案 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; }
)