-1

列の値を切り替えようとしています。エンティティ フレームワーク データベース接続を使用しています。

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(IDictionary2 項目) +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, IDictionary2 つのパラメーター) +182 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext、ActionDescriptor actionDescriptor、IDictionary 2 parameters) +27 System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28 System.Web.Mvc.Async.<>c__DisplayClass81.b__7(IAsyncResult ) +10 System.Web.Mvc.Async.WrappedAsyncResult 1.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.WrappedAsyncResult1.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.WrappedAsyncResult 1.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.WrappedAsyncResult1.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.WrappedAsyncResult 1.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.WrappedAsyncResult1.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 とは関係のない問題です。

4

1 に答える 1

0

スタック トレース:

[InvalidOperationException: 型 'System.Int32' は列挙型を表す必要があります。]
System.ComponentModel.DataAnnotations.EnumDataTypeAttribute.IsValid(Object

この注釈は次のことを示唆しています。

[EnumDataType(typeof(int), ErrorMessage = "{0} mutlaka sayı olmalıdır!")]

public virtual int testSuresi { get; set; }吐いています。

于 2013-08-01T20:40:04.790 に答える