-1

私は今のところ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);
    }
}

}

関数の呼び出し:

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 (オブジェクト [] キー値) で
   System.Data.Entity.DbSet`1.Find (オブジェクト [] キー値) で
   C:\Users\William-Business\Desktop\TWB\TWB Central\Projects\MusingMonkey\MusingMonkey\Helpers\BadgeHelper.cs:line 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(Closure , ControllerBase , Object[] ) で
   System.Web.Mvc.ActionMethodDispatcher.Execute (ControllerBase コントローラー、オブジェクト [] パラメーター) で
   System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext、IDictionary`2 パラメーター) で
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (ControllerContext 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 に答える