列の値を切り替えようとしています。エンティティ フレームワーク データベース接続を使用しています。
public static void yayinDegistir(int id)
{
using (vt dc = new vt())
{
Testler d = dc.testler.FirstOrDefault(t => t.testId.Equals(id));
if (d != null)
{
d.yayinda = !d.yayinda; //bool value to toggle
dc.SaveChanges(); //error
}
}
}
そして、エラーは
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: The type 'System.Int32' needs to represent an enumeration type.
テストラークラス
public class Testler
{
[Key]
[ScaffoldColumn(false)]
public virtual int testId { get; set; }
[DataType(DataType.Text)]
[Display(Name = "Test Adı")]
public virtual string testAdi { get; set; }
[DataType(DataType.MultilineText)]
public virtual string aciklama { get; set; }
[DataType(DataType.Text)]
[EnumDataType(typeof(int), ErrorMessage = "{0} mutlaka sayı olmalıdır!")]
public virtual int testSuresi { get; set; }
public virtual bool cokluSecim { get; set; }
[DataType(DataType.MultilineText)]
public virtual string oneriler { get; set; }
public virtual bool yayinda { get; set; }
public virtual ICollection<Sorular> sorular { get; set; }
}
エラーのスタック トレース
スタックトレース:
[InvalidOperationException: The type 'System.Int32' needs to represent an enumeration type.] System.ComponentModel.DataAnnotations.EnumDataTypeAttribute.IsValid(Object
値) +40216 System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(オブジェクト値、ValidationContext validationContext) +115 System.ComponentModel.DataAnnotations.ValidationAttribute.GetValidationResult(オブジェクト値、ValidationContext validationContext) +29 System.Data.Entity.Internal.Validation. ValidationAttributeValidator.Validate(EntityValidationContext entityValidationContext、InternalMemberEntry プロパティ) +100
[DbUnexpectedValidationException: An unexpected exception was thrown during validation of 'Test Süresi (saniye) (0 süresiz)' when
System.ComponentModel.DataAnnotations.EnumDataTypeAttribute.IsValid を呼び出します。詳細については、内部例外を参照してください。 +108 System.Data.Entity.Internal.Validation.EntityValidator.ValidateProperties(EntityValidationContext entityValidationContext, InternalPropertyEntry parentProperty, リスト
1 validationErrors) +100 System.Data.Entity.Internal.Validation.TypeValidator.Validate(EntityValidationContext entityValidationContext, InternalPropertyEntry property) +69 System.Data.Entity.Internal.Validation.EntityValidator.Validate(EntityValidationContext entityValidationContext) +17 System.Data.Entity.Internal.InternalEntityEntry.GetValidationResult(IDictionary
2 項目) +193 System.Data.Entity.DbContext.ValidateEntity(DbEntityEntry entityEntry, IDictionary2 items) +40 System.Data.Entity.DbContext.GetValidationErrors() +210 System.Data.Entity.Internal.InternalContext.SaveChanges() +44 System.Data.Entity.Internal.LazyInternalContext.SaveChanges() +33 System.Data.Entity.DbContext.SaveChanges() +20 Ramazan.TestIslem.yayinDegistir(Int32 id) in D:\Projects\Visual Studio 2010\Projects\hayatdestek\hayatdestek\Ramazan\Testler.cs:102 hayatdestek.Controllers.YonetimController.YayinDegistir(Int32 id) in D:\Projects\Visual Studio 2010\Projects\hayatdestek\hayatdestek\Controllers\YonetimController.cs:180 lambda_method(Closure , ControllerBase , Object[] ) +97 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 つのパラメーター) +182 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext、ActionDescriptor actionDescriptor、IDictionary2 parameters) +27 System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28 System.Web.Mvc.Async.<>c__DisplayClass8
1.b__7(IAsyncResult ) +10 System.Web.Mvc.Async.WrappedAsyncResult1.End() +50 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +58 System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +225 System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +50 System.Web. Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 System.Web.Mvc.Async.<>c _DisplayClass2a.b_ 20() +24 System.Web.Mvc.Async.<>c _DisplayClass25.b_ 22(IAsyncResult asyncResult) ) +99 System.Web.Mvc.Async.WrappedAsyncResult1.End() +50 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +55 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39 System.Web.Mvc.Async.<>c _DisplayClass4.b_3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult1.End() +55 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__4(IAsyncResult asyncResult) +25 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +55 System.Web.Mvc.<>c _DisplayClasse.b_ d() +31 System.Web.Mvc.SecurityUtil.b _0 (アクション f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(アクション アクション) +23 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +59 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler. EndProcessRequest(IAsyncResult 結果) +9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629296 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
@Pawelからの解決策の回答
この例外は [EnumDataType(typeof(int), ErrorMessage = "{0} mutlaka sayı olmalıdır!")] から発生しているようです。ここで、型は単純型ではなく Enum 型である必要があります。この属性を削除して、動作をテストしてみてください。EnumDataType 属性は EF では使用されないことに注意してください。これはおそらく EF とは関係のない問題です。