我正在尝试使用实体框架对我的域模型进行建模。一个例子是包含Content类的Page类。
public class Page
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Content PageContent { get; set; }
}
public class Content
{
public IList<Version> Versions { get; private set; }
public Version GetLatestPublishedVersion()
{
//Some biz logic to get the latest published version
}
public Version GetLatestDraftVersion()
{
//Some biz logic to get the latest draft version
}
public void AddVersion() {}
public void DeleteVersion() {}
....
}
数据库模型没有Content表,实际上表关系是:
Pages Table
----------
Id
Name
Versions Table
--------------
Id
PageId FK PAGES.ID
Title
Body
如何在概念模型中对Content类进行建模? 我尝试使用复杂类型,但它只保存标量属性。尝试使用实体类型,但我得到一条消息,基本上说在数据库中为Content类设置一个表,为什么?
我不觉得域模型是错误的,它的设计是这样的,因此发布问题不在Page类上。典型的封装工作在这里。
还有其他人遇到过这个问题吗?
答案 0 :(得分:0)
您的(概念)实体应该与数据库架构非常匹配,然后项目到您的Content类:
var q = from p in Context.PageEntities // PageEntity is different than Page
where p.id == id
select new Page
{
Id = p.Id,
Name = p.Name,
Content = new Content
{
Versions = from v in p.Versions
select new Version
{
Id = v.Id,
Body = v.Body, // etc.
}
}
};
这使您的数据模型和发布模型可以独立发展。您只需要更改投影。