【问题标题】:entity framework POCO template in a n-tiers design questionn 层设计问题中的实体框架 POCO 模板
【发布时间】:2010-05-31 03:49:14
【问题描述】:

大家好

我试图遵循 POCO 模板演练。现在我在 n 层设计中使用它时遇到了问题。

按照文章,我将我的 edmx 模型和模板生成的 context.tt 放在我的 DAL 项目中,并将生成的 model.tt 实体类移动到我的业务逻辑层 (BLL) 项目中。

通过这样做,我可以在我的 BLL 中使用这些实体而不引用 DAL,我想这就是 PI 的想法;对数据源一无所知。

现在,我想扩展实体(在 model.tt 中)以在 BLL 项目中执行一些 CUD 操作,所以我添加了一个与从模板生成的同名的新部分类,

public partial class Company
{
    public static IEnumerable<Company> AllCompanies()
    {
        using(var context = new Entities()){

            var q = from p in context.Companies
                    select p;

            return q.ToList();
       }
    }
}

但是 Visual Studio 不允许我这样做,我认为这是因为 context.tt 在 DAL 项目中,并且 BLL 项目无法添加对 DAL 项目的引用,因为 DAL 已经引用了BLL。

所以我尝试将这个类添加到 DAL 并对其进行编译,但 intelisense 不会在我的 Web 服务项目中的我的 Web 服务方法中显示 BLL.Company.AllCompanies(),它引用了我的 BLL 项目。

我现在该怎么办?我想在我的 BLL 项目中将 CUD 方法添加到模板生成的实体中,并从另一个项目的 Web 服务中调用它们。

我这几天一直在寻找这个答案,我真的需要一些来自这里的指南。

布莱恩

【问题讨论】:

    标签: entity-framework templates poco n-tier-architecture


    【解决方案1】:

    嗯,你的层架构看起来有点像意大利面。 首先,在我看来,您的 POCO 对象应该放在一个不引用任何 DAL 的不同程序集中,否则为什么要打扰 POCO ? 其次,部分类中的静态方法看起来不太好,保持你的 poco 对象非常简单,并将它的逻辑交给存储库。

    看一看,一切都会一清二楚:

    http://thedatafarm.com/blog/data-access/agile-entity-framework-4-repository-part-1-model-and-poco-classes/

    【讨论】:

      【解决方案2】:

      我认为 DAL 不应该引用 BLL。我认为应该反过来。 BLL 应该是持久性无知的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 2012-12-17
        • 2011-08-11
        相关资源
        最近更新 更多