我有一个现有的数据库,我正在使用 entityframework 6 Code-First 来使用它。不过,一个要求是所有使用数据库的工作都必须通过存储过程。所以我开始使用 6.0 中的新映射:
modelBuilder.Entity<Post>().MapToStoredProcedures();
问题是这只支持映射插入、更新和删除 sp,而不是选择 sp,我需要能够让我们选择一个 sp。(我无权编辑任何现有的 sp)
我的 poco 上有属性,指定要使用 column 属性使用的列名。显然,除非您通过 dbset 对象对表进行直接选择,否则内置映射不支持使用这些映射。
最初我有(有效):
return (from c in DataContext.Current.AgeRanges orderby c.StartAge select c);
然后将其切换到我尝试过的 sp(使用数据库 sqlquery 调用):
return DataContext.Current.Database.SqlQuery<AgeRange>("[DIV].[GetAgeRangesList]").AsQueryable();
这返回了有效的对象,但标有 Column 属性的列中没有任何内容。
然后我尝试了(认为因为它与实际的 dbset 对象相反,所以我会得到列映射):
return DataContext.Current.AgeRanges.SqlQuery("[DIV].[GetAgeRangesList]").ToList().AsQueryable();
不,这反而给了我一个错误,即在返回的记录集中找不到 POCO 对象中的一个属性(Column 属性之一)。
所以问题是,在实体框架(或除此之外的最佳解决方案)中,调用存储过程并将结果映射到对象并使该映射尊重属性上的列属性的最佳方法是什么?
我什至愿意使用老式的 Table 对象和 SqlCommand 对象来填充它,如果我有一种快速简单的方法来映射尊重 Column 属性的对象。