【发布时间】:2014-03-19 10:31:53
【问题描述】:
我对对象上下文翻译方法的 EF 有疑问。
我创建了一个名为 PremiumCalculationASView 的视图
public class PremiumCalculationASView : BaseProposalASView
{
public PreCalProView PreCalProView { get; set; }
public PreCalInsView PreCalInsView { get; set; }
public PreCalPolView PreCalPolView { get; set; }
}
在这个视图上,我有一个三个属性,它也是一个视图。这是其中之一
public class PreCalPolView
{
[DataMember]
public bool PWRRider { get; set; }
[DataMember]
public Int32 PremiumPayingTerm { get; set; }
[DataMember(Name = "Premium")]
public decimal Premium { get; set; }
}
现在我正在调用一个存储过程来填充 PremiumCalculationASView 对象
public PremiumCalculationASView GetQuotationDetails(PremiumCalculationASView premiumCalculationView, string applicationConnectionString)
{
Database db = new Database(applicationConnectionString);
DbConnection connection = null;
DbCommand command = null;
List<DbParameter> dbparams = new List<DbParameter>();
var result = new List<PremiumCalculationASView>();
try
{
db.AddInParam(dbparams, "PkQuotationId", DbType.Int32, premiumCalculationView.QuotationId);
db.BuildOutParam(dbparams, "ErrorCode", DbType.String, 30);
db.BuildOutParam(dbparams, "TotalRecords", DbType.String, 30);
DbDataReader objReader = db.ExecuteReader(ref connection, ref command, "[eApp_GET_QUOTATION_DETAILS]", CommandType.StoredProcedure, dbparams.ToArray());
using (var context = new OnlineSalesContainer())
{
//result.AddRange(context.Translate<PremiumCalculationASView>(objReader,));
var preCalPolViewMap = new DataReaderAutoMap<PreCalPolView>();
var premiumCalculationASViewMap = new DataReaderAutoMap<PremiumCalculationASView>()
.Specify((s, t) => t.PreCalPolView = preCalPolViewMap.Create(objReader));
result = premiumCalculationASViewMap.CreateList(objReader);
}
}
catch
{
throw;
}
finally
{
db.CloseReader(ref connection, ref command);
}
return result[0];
}
现在的问题是 PremiumCalculationASView 根属性已填充,但子对象 [PreCalInsView] 属性未填充。
我检查了 SP,它正在返回我需要的数据,并且数据成员名称在 SP 中也相同。 请让我知道我在这里做错了什么。
编辑 问题解决了 ! 这是通过使用 github 上的任何对象到对象的映射库来完成的:Sixeyed.Mapping。
【问题讨论】:
-
sproc 只返回平面结果,
context.Translate只处理平面结果。它不能创建整个对象图。您必须自己构建对象。 -
感谢@Gert Arnold 的帮助。现在我在 github 上使用任何对象到对象的映射库:Sixeyed.Mapping。
-
您介意展示一下您是如何做到这一点的,以回答您自己的问题吗?这可能是一种很有前途的方法,但该库的文档是
null。 -
@GertArnold 我已经更新了我的问题,请检查 **var preCalPolViewMap = new DataReaderAutoMap
(); var premiumCalculationASViewMap = new DataReaderAutoMap () .Specify((s, t) => t.PreCalPolView = preCalPolViewMap.Create(objReader));结果 = premiumCalculationASViewMap.CreateList(objReader); ** -
请把它放在答案中,以便我们阅读。您可以将自己的答案标记为已接受。
标签: c# asp.net asp.net-mvc-3 entity-framework