簡體   English   中英

通過LINQ表達式調用時,“ EdmType不能多次映射到CLR類”。 猜測EDMX已加載兩次

[英]“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=&quot;data source=VILLAIN\SQLEXPRESS;initial catalog=SISTEM;User ID=sa; Password=pasword;multipleactiveresultsets=True;App=EntityFramework&quot;" 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM