不确定这是聪明,作弊还是有点酷

时间:2011-02-21 15:43:40

标签: c# entity-framework

所以我已经在我的edmx文件中列出了所有内容 我创建了以下

 public sealed class ACategory:example.org.Data.Categories
{
    public ACategory()
    {

    }

    public int PostingCount
    {
        get;
        set;
    }
}

然后我决定弄清楚如何进行编译查询,只是因为它看起来很酷。

public static Func<MyEntities, IQueryable<ACategory>> GetCategoriesWithPostingCount =
        CompiledQuery.Compile((MyEntities entities) => from category in entities.Categories.Include("Postings_Categories")
                                                               select new ACategory
                                                               {
                                                                   CategoryID =category.CategoryID,
                                                                   ParentCategoryID = category.ParentCategoryID,
                                                                   CategoryName = category.CategoryName,
                                                                   CategoryDescription = category.CategoryDescription,
                                                                   PostingCount = category.Postings_Categories.Count
                                                               });

它非常有用......方式很酷我现在可以从任何地方轻松地调用它。

我现在的问题是这个?这是一个很好的方法吗?或者我在幕后潜伏的东西上犯了错误?

2 个答案:

答案 0 :(得分:1)

你在任何地方打电话是什么意思?你的意思是说你现在能够跨越不应正在调用你的数据库的层吗?

我认为这是不好的做法,所有数据访问都应该在DAL中完成。通常认为“好的做法”是让你的DAL仅传回IEnumerables来强制执行这样一个事实,即查询不能“随意”调用。

答案 1 :(得分:0)

如果这样做,则必须公开数据上下文。如果您仅在DAL中使用已编译的查询,则这不是问题,但需要考虑。不过,这是创建业务对象的简洁方法!