c# - 使用 Code First Entity Framework 的数据访问层、模型层和 POCO 类

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

我遵循“首先编程 Entity Framework 代码”中提出的建议架构路径。

VS中有一个数据访问层和一个模型层,它们都形成单独的项目。

模型层保存我的业务对象类。 DataAccess 层具有对 Model 项目的引用,以便它可以为我的每个业务对象创建上下文和 DbSet。

问题是模型中的某些类需要访问数据层来执行计算,但是我无法在模型项目中引用数据访问层,因为它将创建循环引用。 DataAccess 层必须引用 Model 层,以便它可以创建 DbSet。 另请注意,计算是只读的 - 仅限 getter,不会持久保存到数据库中。

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

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

公共(public)类交易

{
    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 中。恕我直言,您需要创建一个单独的服务层(或您所说的任何名称)并将业务逻辑放置在那里。 POCO 实际上应该是没有任何业务逻辑的简单对象。

所以你的架构将如下所示:

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

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

关于c# - 使用 Code First Entity Framework 的数据访问层、模型层和 POCO 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537285/

相关文章:

c# - 从具体化 'System.Guid' 类型到 'System.String' 类型的指定转换无效

c# - 如何为非阻塞异步套接字创建 SslStream

c# - 使用c#将文件上传到服务器

c# - 将对象转换为它的类

c# - Entity Framework - 对业务层需求的意见

entity-framework - EF CF 中是否需要 Key、ForeignKey 等属性?

c# - 如何首先在代码中创建函数?

c# - 在严格的 O(n) 时间内对整数数组进行排序

c# - 林克异常 : Function can only be invoked from linq to entities

c# - 记录在 DbContext 上执行的所有 linq 查询 - C#