DataAccess层、模型层和具有代码优先实体框架的POCO类



我遵循"编程实体框架代码优先"中提出的建议架构路径。

在VS中有一个DataAccess层和一个Model层,它们都形成了单独的项目。

Model层保存了我的业务对象类。DataAccess层有一个对Model项目的引用,这样它就可以为我的每个业务对象创建上下文和DbSet。

问题是,模型中的某些类需要访问数据层来执行计算,但我不能在模型项目中引用DataAccess层,因为它将创建循环引用。DataAccess层必须引用Model层,才能创建DbSets。还请注意,计算是只读的getter,不会持久化到数据库中。

我已经搜索了几个小时,找到了有用的信息,但我想我错过了一些简单的东西?POCO类本来是简单的,但我的类代表了一些非常相关但更复杂的计算。

作为一个简单的具体例子,我有一个Transaction类和一个AccountBalance类。Transaction类需要知道特定日期的AccountBalance,以便于显示,例如百分比变化(这只是一个简单的例子):

公共类交易

{
public DateTime Date { get; set; }
public string Description { get; set; }    
... etc    
public double PercentageChange
{
get
{
// return TransactionAmount / AccountBalance on TransactionDate    
//  however Transaction has no knowledge of AccountBalance... 
}
}
}

感谢

就我个人而言,我不会将业务逻辑放在我的POCO中。Imho,您需要创建一个单独的服务层(或您所称的任何层),并将业务逻辑放置在那里。POCO实际上应该是没有任何业务逻辑的简单对象。

因此,您的架构将如下所示:

GUI->服务层->数据访问层(存储库?)->数据库。

现在,您的所有项目都可以引用您的模型层。

相关内容

  • 没有找到相关文章

最新更新