到目前为止,我很喜欢EF。我的项目在尝试将System.Data.Entity.DynamicProxies.Badge转换为Badge时开始崩溃。我不知道该怎么办。我已经阅读了关于Proxies的文档,我对此有所了解。如果它有利于它,我不想禁用代理功能吗?
我该如何解决这个问题?基本上我调用函数MyFunc(myBadge);因为MyFunc采用Badge类型的参数,所以它会崩溃。代码如下:
foreach(Badge B in badgesOfBadgeType) {
Assembly assembly = Assembly.LoadFile(GlobalHelper.GetCurrentContext().Server.MapPath("~") + "bin/MM.dll";
Type classs = assembly.GetType("MM.Helpers.BadgeHelper");
string methodName = "DoesUserEventUnlockBadge_"+B.ID;
MethodInfo methodInfo = classs.GetMethod(methodName);
if (methodInfo != null)
{
ParameterInfo[] parameters = methodInfo.GetParameters();
object[] parametersArray = new object[] { B, UE };
bool didUnlock = (bool)methodInfo.Invoke(null, parametersArray);
if (didUnlock)
{
unlockedBadges.Add(B);
}
}
}
调用func:
public static bool DoesUserEventUnlockBadge_1(Badge B, UserEvent UE)
{
//Check here..
return true;
}
新的错误,当我去db.Badges.find(b);并使用它(I.E非代理人)
System.ArgumentOutOfRangeException: The specified parameter type 'System.Data.Entity.DynamicProxies.Badge_90C17B99EFACD091308AD8F9030C6441D90D4237AC5630A4C2F673A79A186B27' is not valid. Only scalar types, such as System.Int32, System.Decimal, System.DateTime, and System.Guid, are supported. Parameter name: parameter at System.Data.Objects.ObjectParameterCollection.Add(ObjectParameter parameter) at System.Data.Objects.ObjectContext.CreateQuery[T](String queryString, ObjectParameter[] parameters) at System.Data.Entity.Internal.Linq.InternalSet`1.FindInStore(WrappedEntityKey key, String keyValuesParamName) at System.Data.Entity.Internal.Linq.InternalSet`1.Find(Object[] keyValues) at System.Data.Entity.DbSet`1.Find(Object[] keyValues) at MusingMonkey.Helpers.BadgeHelper.UnlockedBadgesForEvent(BaseDBContext db, UserEvent UE, User user) in C:\Users\William-Business\Desktop\TWB\TWB Central\Projects\MusingMonkey\MusingMonkey\Helpers\BadgeHelper.cs:line 31 at MusingMonkey.Helpers.UserIdeaHelper.PushVoteToIdea(BaseDBContext db, Nullable`1 id, String direction) in C:\Users\William-Business\Desktop\TWB\TWB Central\Projects\MusingMonkey\MusingMonkey\Helpers\UserIdeaHelper.cs:line 164 at MusingMonkey.Controllers.IdeasController.Vote(Nullable`1 id, String direction) in C:\Users\William-Business\Desktop\TWB\TWB Central\Projects\MusingMonkey\MusingMonkey\Controllers\IdeasController.cs:line 23 at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
答案 0 :(得分:0)
不知道为什么,但反射有问题,如果我只是将其发送到正常的方法就有效。
答案 1 :(得分:0)
我认为您可以在dbContext类中使用“this.Configuration.ProxyCreationEnabled = false”。