实体框架 - 使用存储过程和映射属性

时间:2012-07-25 17:44:21

标签: c# entity-framework

我的框架设置首先使用BaseEntity类型的代码,该类型只包含Id和Name属性(我的所有db表至少包含这两个字段)。问题是db是在我们实现EF之前编写的,因此db中的许多列名与这个不错的Id / Name约定不匹配(例如,可能有CustomerId和CustomerName等)。现在到目前为止基本的CRUD操作一切正常,因为我只是在我的映射中执行此操作:

this.HasKey(t => t.Id).Property(t => t.Id).HasColumnName("CustomerId");

它正确地从一个映射到另一个并且一切都很好

但是,我们还有一些复杂的数据库逻辑只能封装在存储过程中,所以在我的ObjectContext中我有一个通用的方法来调用返回IList的sprocs并允许你传入proc的名称来调用和任何它需要的参数,然后转到ObjectContext上的底层Database对象进行调用。这适用于poco中的属性名称与db中的属性名称匹配的类,但如果它们不匹配,则忽略我为该对象设置的任何映射(见上文),我得到如下错误:

The data reader is incompatible with the specified 'SomeNamespace.Customer'. 
A member of the type, 'Id', does not have a corresponding column in the data 
reader with the same name.

是否有任何干净的解决方法或正确指示它在基础datareader上正确映射?

感谢

0 个答案:

没有答案