具有Code First Entity Framework的DataAccess层,Model层和POCO类

时间:2012-11-24 00:44:16

标签: c# entity-framework code-first poco data-access-layer

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

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

Model层包含我的业务对象类。 DataAccess层具有对Model项目的引用,因此它可以为我的每个业务对象创建上下文和DbSet。

问题是模型中的某些类需要访问数据层来执行计算,但是我不能在我的Model项目中引用DataAccess图层,因为它将创建循环引用。 DataAccess图层必须引用Model层,以便它可以创建DbSet。 另请注意,计算是只读的 - 只有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... 
         }
    }
}

由于

1 个答案:

答案 0 :(得分:2)

我个人 NOT 将业务逻辑放在我的POCO中。你需要创建一个单独的服务层(或者你称之为的任何服务层)并将业务逻辑放在那里。 POCO应该是没有任何业务逻辑的简单对象。

所以你的架构看起来像这样:

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

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