我是众多试图理解聚合根的概念之一,我认为我已经掌握了它!但是,当我开始为这个示例项目建模时,我很快陷入了两难境地.
我有两个实体ProcessType和Process.一个Process不能存在没有ProcessType和ProcessType拥有众多Process上课.所以一个进程持有一个类型的引用,没有它就不能存在.
那应该ProcessType是聚合根?通过调用创建新进程processType.AddProcess(new Process()); 但是,我有其他实体只持有Process对它的引用,并通过它访问它的类型Process.Type.在这种情况下,ProcessType首先没有任何意义.
但聚合之外的AFAIK实体仅允许保留对聚合根的引用,而不允许对聚合内的实体进行引用.那么这里有两个聚合,每个聚合都有自己的存储库吗?
我刚开始在项目中使用代码契约.但是,我的存储库实现存在问题,它使用实体框架查询我的数据库.
我有以下方法:
public IEnumerable<Organization> GetAllOrganizations()
{
return _uow.CreateSet<Party>().OfType<Organization>().AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)
该方法返回一个包含数据库中所有组织的集合,或者一个空集合,它不是数据库中的组织.
但是,根据CodeContracts,这是不行的,它给了我错误:"需要unproven:source!= null"
它试图告诉我什么?我可以通过使用Contract.Assume来满足代码契约,假设它总能找到一些东西,但是我需要在从数据库中读取数据的所有方法中都这样做.
我在这里遗漏了什么,或者当你使用数据库和LINQ时,它是否是预期的行为?