到目前为止,我很喜欢 EF。我的项目在尝试将 System.Data.Entity.DynamicProxies.Badge 转换为 Badge 时开始崩溃。我不知道该怎么办。我已经阅读了有关代理的文档,并且我有点理解它。如果拥有它是有益的,我不想禁用代理功能?
我怎样才能解决这个问题?基本上我调用一个函数 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);
}
}
}
调用函数:
public static bool DoesUserEventUnlockBadge_1(Badge B, UserEvent UE)
{
//Check here..
return true;
}
新错误,当我去 db.Badges.find(b); 并使用它(即非代理)
System.ArgumentOutOfRangeException:指定的参数类型“System.Data.Entity.DynamicProxies.Badge_90C17B99EFACD091308AD8F9030C6441D90D4237AC5630A4C2F673A79A186B27”无效。仅支持标量类型,例如 System.Int32、System.Decimal、System.DateTime 和 System.Guid。 参数名称:参数 在 System.Data.Objects.ObjectParameterCollection.Add(ObjectParameter 参数) 在 System.Data.Objects.ObjectContext.CreateQuery[T](字符串 queryString,ObjectParameter[] 参数) 在 System.Data.Entity.Internal.Linq.InternalSet`1.FindInStore(WrappedEntityKey 键,字符串 keyValuesParamName) 在 System.Data.Entity.Internal.Linq.InternalSet`1.Find(Object[] keyValues) 在 System.Data.Entity.DbSet`1.Find(Object[] keyValues) 在 C:\Users\William-Business\Desktop\TWB\TWB Central\Projects\MusingMonkey\MusingMonkey\Helpers\BadgeHelper.cs: 31 中的 MusingMonkey.Helpers.BadgeHelper.UnlockedBadgesForEvent(BaseDBContext db, UserEvent UE, User user) 在 C:\Users\William-Business\Desktop\TWB\TWB Central\Projects\MusingMonkey\MusingMonkey\Helpers\UserIdeaHelper.cs:line 中的 MusingMonkey.Helpers.UserIdeaHelper.PushVoteToIdea(BaseDBContext db, Nullable`1 id, String direction) 164 在 C:\Users\William-Business\Desktop\TWB\TWB Central\Projects\MusingMonkey\MusingMonkey\Controllers\IdeasController.cs:line 23 中的 MusingMonkey.Controllers.IdeasController.Vote(Nullable`1 id, String direction) 在 lambda_method(闭包,ControllerBase,对象 []) 在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,Object[] 参数) 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary`2 参数) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext 控制器上下文,ActionDescriptor actionDescriptor,IDictionary`2 参数) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() 在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)