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

时间:2014-03-18 12:46:12

标签: c# linq asp.net-mvc-3 linq-expressions

我有一个带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&#34;通常&#34; (在常规代码中)我得到了#34;多个映射错误&#34;。

此外,如果我首先实例化MFIModelContainer&#34;通常&#34;,然后再通过linq表达式我得到错误。

如果我独占使用一种方法,一切都会好的。

所以,我认为,EDMX加载了两次,但我不知道该怎么办。

我还必须强调,这个EDMX没有在我的MVC应用程序的主dll中定义,但在另外一个,它连接在global.asax(我觉得这可能很重要)。

有人可以告诉我如何解决这个问题?

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

好的,只是回答我的问题。

事实证明

Assembly.LoadFile() 

不太善于解决依赖关系。

所以,我切换到了

Assembly.LoadFrom()

一切都很好。

的问候。