-1

我是DDD的新手。在我们的DDD的项目,我们有我们的DbContext应该只露出AggregateRoots ..假设我们的DbContext是如下图所示仅暴露来自DBContext的聚合根

public class ClassContext : DbContext 
{ 
    public DbSet<Class> Classes{ get; set; } 
    public DbSet<Students> Students{ get; set; } 
} 

和类是聚合根的要求。在下面的执行正确的方式

public class ClassContext : DbContext 
    { 
     public DbSet<Class> Classes{ get; set; } 
     private DbSet<Students> Students{ get; set; } 
    } 

任何评论表示赞赏

+1

您需要详细了解DDD和[存储库模式](http://blog.sapiensworks.com/post/2014/06/02/The-Repository-Pattern-For-Dummies.aspx)作为一个概念,只有这样你才能解决实施问题。如果你正在寻找一个快速解决方案,那不是如何完成的。顺便说一下,ORM是一个存储库的[实现细节](http://blog.sapiensworks.com/post/2012/04/15/The-Repository-Pattern-Vs-ORM.aspx/)。如果你不理解这个概念,那么代码将不会对你有所帮助。 – MikeSW

回答

0

在应用程序中考虑聚合根是非常有用的,但不要尝试将DDD概念应用于实体框架类模型。

实体框架类模型是而不是域模型。这是一个数据访问层。关于包含或隐藏实体和/或导航属性的任何考虑都应该通过促进数据访问的顺利进行以及仅此而已。

你不可能总是只通过课程阅读/创建/更新/删除学生。这会造成不必要的笨重代码。谁说学生会一直在班上?

但也许这不是聚合的最好例子。 A Student没有识别与Class的关系,因为下次他将在另一个班级中。这与典型的Order-OrderLine关系会有所不同。我可以想象,在这种情况下,你可能只会暴露DbSet<Order>

所以只需公开课DbSet<Students>

0

我不认为需要对学生的私人声明。 想必类对象包含类似

public virtual List<Student> Students { get; set; } 

这样,因为你只露出骨料根的要求,你的代码找到一个学生总是需要找到一个类和撤出它的学生。