問題的一種解決方法解決:
我加入3-複雜類型到我的潛行,匹配每個單獨的結果集的數據結構。 此外,我在數據上下文之外添加了一個容器類,它使用複雜類型將數據保存在一個對象中。 我使用自定義方法擴展了上下文類,以處理存儲過程調用並將結果映射到相應的複雜類型.ObjectContext.Translate幫助了很多... WCF數據服務類使用虛擬DataContext實例化。這可以爲我的自定義數據容器類創建元數據,該類現在可以用作自定義WCF數據服務方法的返回類型。 當方法被調用時,數據上下文被實例化。
數據容器類`公共類BrfPackageDataContainer {公共Guid TransactionId {0} {0} {0} {0} 集; }
public List<BrfFlight> Flights {
get;
set;
}
public List<BrfFlight_Info> Flight_Infos {
get;
set;
}
public List<BrfInfo> Infos {
get;
set;
}
public BrfPackageDataContainer() {
this.Flights = new List<BrfFlight>();
this.Flight_Infos = new List<BrfFlight_Info>();
this.Infos = new List<BrfInfo>();
}
}`
上下文擴展名:???? 公共部分類FlightInfoEntities { 公共虛擬BrfPackageDataContainer GetBrfPackage(INT crewId,串operatorCode,串出發,INT FLIGHTID,日期時間stdRangeStart, 日期時間stdRangeEnd,串requestingApplication ,字符串requestsComputerName, string requestedACReg,ref Guid transactionId,int?specificInfoTypeId,byte?levelOfDetail, bool?skipLog){ using(DbCommand command = this.Database.Connection.CreateCommand()){ command.CommandType = CommandType.StoredProcedure; command.CommandText =「[dbo]。[GetBrfPackage]」;
...
var dataContainer = new BrfPackageDataContainer();
try {
this.Database.Connection.Open();
using (DbDataReader reader = command.ExecuteReader()) {
dataContainer.Flights = ((IObjectContextAdapter)this).ObjectContext.Translate<BrfFlight>(reader).ToList();
reader.NextResult();
dataContainer.Flight_Infos = ((IObjectContextAdapter)this).ObjectContext.Translate<BrfFlight_Info>(reader).ToList();
reader.NextResult();
dataContainer.Infos = ((IObjectContextAdapter)this).ObjectContext.Translate<BrfInfo>(reader).ToList();
}
return dataContainer;
} catch (Exception ex) {
throw ex;
}
}
WCF數據服務方法:
[WebGet]
[SingleResult]
public BrfPackageDataContainer GetBrfPackage() {
using (var brfCtx = new FlightInfoEntities()) {
Guid transactionId = new Guid();
var brfPackageDataContainer = brfCtx.GetBrfPackage(null,"4T",null,null,null,null,"test",Environment.MachineName,null,ref transactionId,null,3,false);
return brfPackageDataContainer;
}
}
我不認爲這是可能的。使用實體框架時,只能使用EF模型中定義的類型,並且不能將自定義類型添加到模型中。如果複雜類型對您來說足夠了,您可以嘗試向您的EF模型中添加一個虛擬複合類型,EF不會使用它,但您會使用它(注意 - 我沒有嘗試過)。 – Pawel