所以我已经在我的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
});
它非常有用......方式很酷我现在可以从任何地方轻松地调用它。
我现在的问题是这个?这是一个很好的方法吗?或者我在幕后潜伏的东西上犯了错误?
答案 0 :(得分:1)
你在任何地方打电话是什么意思?你的意思是说你现在能够跨越不应正在调用你的数据库的层吗?
我认为这是不好的做法,所有数据访问都应该在DAL中完成。通常认为“好的做法”是让你的DAL仅传回IEnumerables来强制执行这样一个事实,即查询不能“随意”调用。
答案 1 :(得分:0)
如果这样做,则必须公开数据上下文。如果您仅在DAL中使用已编译的查询,则这不是问题,但需要考虑。不过,这是创建业务对象的简洁方法!