我有一个带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&#34;通常&#34; (在常规代码中)我得到了#34;多个映射错误&#34;。
此外,如果我首先实例化MFIModelContainer&#34;通常&#34;,然后再通过linq表达式我得到错误。
如果我独占使用一种方法,一切都会好的。
所以,我认为,EDMX加载了两次,但我不知道该怎么办。
我还必须强调,这个EDMX没有在我的MVC应用程序的主dll中定义,但在另外一个,它连接在global.asax(我觉得这可能很重要)。
有人可以告诉我如何解决这个问题?
致以最诚挚的问候,
答案 0 :(得分:0)
好的,只是回答我的问题。
事实证明
Assembly.LoadFile()
不太善于解决依赖关系。
所以,我切换到了
Assembly.LoadFrom()
一切都很好。
的问候。