一个EdmType不能多次映射到CLR类"当通过LINQ表达式调用时.猜测EDMX被加载了两次

本文关键字:猜测 EDMX 表达式 调用 两次 LINQ 加载 映射 不能 EdmType CLR | 更新日期: 2023-09-27 17:50:50

我有一个MVC3应用程序与EDMX模型:

<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中定义的,而是在另外一个dll中定义的,它在全局中连接。(我觉得这可能很重要)。

谁能给我一些指针我应该怎么做来解决这个问题?

问好,

一个EdmType不能多次映射到CLR类"当通过LINQ表达式调用时.猜测EDMX被加载了两次

好吧,我来回答一下我的问题。

结果是

Assembly.LoadFile() 

不擅长解析依赖关系。

因此,我切换到

Assembly.LoadFrom()

一切都好。

致意。