我正在使用实体框架。我正在调用一个返回多个数据集的存储过程。其中一个结果集映射到我为其定义了枚举的实体,并定义了一个字符串支持属性以接收结果并解析出枚举。
public class OrderInfo
{
[Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid orderID { get; set; }
[NotMapped]
public BillingStatus billingStatus { get; set; }
[Required, Column("billingStatus")]
public string billingStatusString
{
get { return billingStatus.ToString(); }
private set { billingStatus = (BillingStatus)Enum.Parse(typeof(BillingStatus), value); }
}
}
不幸的是,调用db.ObjectContext.Translate(...)时会忽略注释。我收到一条错误消息
var cmd = db.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[GetOrders]";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
db.Database.Connection.Open();
var reader = cmd.ExecuteReader();
var orders = ((IObjectContextAdapter)db)
.ObjectContext
.Translate<OrderInfo>(reader, "Orders", MergeOption.AppendOnly)
.ToList();
reader.NextResult();
不遵守数据注释中定义的映射,并且Translate方法尝试通过其实际名称billingStatusString
而不是其映射值billingStatus
绑定到支持属性。
类型&#39; System.Data.Entity.Core.EntityCommandExecutionException&#39;的第一次机会异常。发生在EntityFramework.dll
中其他信息:数据阅读器与指定的&Orders.OrderInfo&#39;不兼容。该类型的成员&#39; billingStatusString&#39;在数据阅读器中没有相应的列具有相同的名称。
任何人都知道这是为什么,或者有解决方法?