c# - 层和实体?

标签 c# .net entity-framework 3-tier

(我要问 2 个问题)。

我们使用 3 层:BL、Dal、UI。

enter image description here

我们不想为所有对象构建一个大的BLDAL

因此,我们为代理潜在客户创建了这个结构。

现在假设我应该编写一个方法:

public Agent GetAgentByLead(Lead leadObj)
 {
 }

问题#1

此函数应驻留在哪里:AgentsBLLeadsBL

问题#2

假设我想使用 Entity Framework 。

查询可以是:

var activeAgents= context.Agents.Where(c => c.ACTIVE).ToList();

此行可以在 myPage.aspx.cs 文件中执行。

那么这里的层在哪里?上下文将驻留在哪里?

我只是不明白 EF 如何处理层(就像我的第一个问题)

请问有什么帮助吗?

最佳答案

此类事情的常用模式是 Repository Pattern ,如果你用谷歌搜索,你会发现大量信息,这个想法是你基本上创建一个封装上下文的存储库,这样你就永远不会直接使用它......

我更喜欢通用存储库,它们具有常见的 CRUD 方法,但也具有以下内容:

IEnumerable<T> FindAll(IQuery<T> query);

因此,不必为每种对象类型创建一个唯一的存储库来执行特定查询,例如您的 GetAgentByLead ,您可以将该逻辑包装到查询中并传递上下文,这样您的查询、存储库和 Controller (假设 MVC)都是独立的并且不相互依赖。

示例查询对象类似于:

public interface IQuery<T>
{
    IEnumerable<T> Execute(IContext context);
}

public class FindAllUsersInGroupQuery : IQuery<User>
{
    public int GroupId {get; set;}

    IEnumerable<User> Execute(IContext context)
    {
        return context.DoSomeQueryForGettingUsers(GroupId);
    }
}

这样,您就可以模拟您的查询、存储库并测试您的 Controller (如果您愿意),而且您最终也不会得到难以维护的巨大数据访问器类。

关于c# - 层和实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045880/

相关文章:

c# - 推断具有功能组合的通用类型

c# - 扩展方法之间的模糊方法调用

c# - 遍历通用字典会抛出异常

asp.net - 如何将 Entity Framework 对象数据绑定(bind)到 FormView

c# - 如何从字符串表示中获取泛型类型?

c# - 如何在 C# 中做标志

.net - 当所有使用的类型都是先验已知时,为什么此代码片段会导致 "Lookup on object of indeterminate type..."?

c# - 具有 2 个外键 Entity Framework 的表

c# - 为什么使用 System.Data.Entity 只需要引用 Entity Framework ?

c# - 服务器响应 404 : Not Found for localhost/undefined