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