-1

到目前为止,我很喜欢 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)
4

2 回答 2

0

不知道为什么,但是反射出了点问题,如果我只是将它正常发送到一个方法就可以了。

于 2012-08-16T09:44:56.133 回答
0

我认为您可以在 dbContext 类中使用“this.Configuration.ProxyCreationEnabled = false”。

于 2012-08-22T16:44:27.220 回答