[英]“An EdmType cannot be mapped to CLR classes multiple times” when called via LINQ Expressions. Guessing EDMX is loaded twice
我有一個具有EDMX模型的MVC3應用程序:
<add name="MFIModelContainer" connectionString="metadata=res://MFI/Models.MFIModel.csdl|res://MFI/Models.MFIModel.ssdl|res://MFI/Models.MFIModel.msl;provider=System.Data.SqlClient;provider connection string="data source=VILLAIN\SQLEXPRESS;initial catalog=SISTEM;User ID=sa; Password=pasword;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
有時我需要做一些動態的事情(解析字符串,創建linq表達式,進行編譯和調用)。
我有非常簡單的功能:
public static decimal Payment(Order sd, string arg)
{
MFIModelContainer mf = new MFIModelContainer();
Kredit k = mf.Dokumenti.OfType<Kredit>().Single(a => a.Ugovor == sd.IntProperty2);
DataModelContainer db = new DataModelContainer();
List<KreditOtplata> ko = mf.KreditOtplate.Where(a => a.Kredit == k.IdDokument).ToList();
// Some calculations...
if (arg == "R") return sd.Amount.Value * 80m / 100m;
else return sd.Amount.Value * 20m / 100m;
}
我將此函數稱為linq表達式的一部分(如下所示):
Type common = Assembly.LoadFile("path to assembply").GetType("MFI.Models.Common");
MethodInfo mi = common.GetMethod("Payment", BindingFlags.Static | BindingFlags.Public);
Expression call = Expression.Call(mi, Expression.Parameter(typeof(Order)), Expression.Constant(typeof(string)));
return Expression.Lambda(SelectExpr, Expression.Parameter(typeof(Order))).Compile().DynamicInvoke(instance_of_Order);
調用后,如果我“正常”實例化MFIModelContainer(以常規代碼),則會出現“多個映射錯誤”。
另外,如果我先“正常”實例化MFIModelContainer,然后再次通過linq表達式,我將得到錯誤。
如果我只使用一種方法,一切都會好的。
因此,我認為EDMX被加載了兩次,但是我不知道該怎么辦。
我還必須強調,此EDMX不是在我的MVC應用的主dll中定義的,而是在另外一個中定義的,它已連接在global.asax中(我覺得這可能很重要)。
誰能為我提供一些建議以解決此問題?
最好的祝福,
好的,只是回答我的問題。
原來是
Assembly.LoadFile()
不能很好地解決依賴關系。
所以,我切換到
Assembly.LoadFrom()
沒事的。
問候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.