我遵循"编程实体框架代码优先"中提出的建议架构路径。
在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->服务层->数据访问层(存储库?)->数据库。
现在,您的所有项目都可以引用您的模型层。