C# 使用Translate映射EF实体列<;T>;
我正在使用实体框架。我正在调用一个返回多个数据集的存储过程。其中一个结果集映射到一个实体,我为该实体定义了枚举,并定义了一个字符串支持属性以接收结果并解析出枚举C# 使用Translate映射EF实体列<;T>;,c#,entity-framework,C#,Entity Framework,我正在使用实体框架。我正在调用一个返回多个数据集的存储过程。其中一个结果集映射到一个实体,我为该实体定义了枚举,并定义了一个字符串支持属性以接收结果并解析出枚举 public class OrderInfo { [Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid orderID { get; set; } [NotMapped] public Billin
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();
var cmd=db.Database.Connection.CreateCommand();
cmd.CommandText=“[dbo].[GetOrders]”;
cmd.CommandType=System.Data.CommandType.StoredProcess;
db.Database.Connection.Open();
var reader=cmd.ExecuteReader();
变量顺序=((IObjectContextAdapter)db)
.ObjectContext
.Translate(读卡器,“订单”,合并选项。仅附录)
.ToList();
reader.NextResult();
数据批注中定义的映射不受尊重,Translate方法尝试通过其实际名称billingStatusString
而不是其映射值billingStatus
绑定到backing属性
EntityFramework.dll中首次出现类型为“System.Data.Entity.Core.EntityCommandExecutionException”的异常
其他信息:数据读取器与指定的“Orders.OrderInfo”不兼容。“billingStatusString”类型的成员在数据读取器中没有同名的对应列
任何人都知道这是为什么,或者有解决方法吗?您可能必须将数据库列映射到名为
billingStatus
的字符串属性,然后使用另一个属性来检索枚举(即billingStatusEnum
),它清楚地显示错误号“billingStatusString”,数据读取器中没有同名的对应列
?@Sampath,我希望应用于billingStatusString
属性的属性列(“billingStatus”
)应该通知EF数据映射来自billingStatus=>billingStatusString。打电话给Translate的时候显然没有,但我想说清楚一点。为什么这是个坏主意?因为我有一个非常类似的问题,你找到解决办法了吗?