使用Translate <t>映射EF实体列

时间:2016-08-23 00:33:49

标签: c# entity-framework

我正在使用实体框架。我正在调用一个返回多个数据集的存储过程。其中一个结果集映射到我为其定义了枚举的实体,并定义了一个字符串支持属性以接收结果并解析出枚举。

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;在数据阅读器中没有相应的列具有相同的名称。

任何人都知道这是为什么,或者有解决方法?

0 个答案:

没有答案