2016-08-07 20 views
1

エンティティフレームワークを使用し、コードを最初に使用する整数IDフィールドを持つレコードを挿入する際に問題が発生します。 IDが0またはIDがNULLのレコードを挿入しようとすると、次の例外が発生します。エンティティフレームワークコード第1 IDインサート例外

追加情報:予期しない行数(0) 。エンティティがロードされてから、エンティティが変更または削除された可能性があります。オプティミスティックな同時実行例外の理解と処理については、http://go.microsoft.com/fwlink/?LinkId=472540を参照してください。

これは私のコントローラ

// POST: Products/Create 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "Product_ID,PageURL,Name,Code,Description,Category_ID,Price,DateCreated,DateModified,Featured")] Product product) 
    { 

     product.DateCreated = DateTime.Now; 
     product.DateModified = DateTime.Now; 

     if (ModelState.IsValid) 
     { 
      db.Products.Add(product); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.Category_ID = new SelectList(db.Categories, "Category_ID", "CategoryName", product.Category_ID); 
     return View(product); 
    } 

であり、これはこれは有用な情報であれば今、私にはわからない

namespace SeniorProjectMVC.Models 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using System.Data.Entity.Spatial; 

    [Table("Product")] 
    public partial class Product 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public Product() 
     { 
      OrderLines = new HashSet<OrderLine>(); 
      SKU_Table = new HashSet<SKU_Table>(); 
      XREF_CatalogProduct = new HashSet<XREF_CatalogProduct>(); 
     } 

     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int ID { get; set; } 

     public string FormattedPrice { get { return this.Price.ToString("C"); } } 

     //[Key] 
     [Required] 
     [MaxLength] 
     public string PageURL { get; set; } 

     [Required] 
     [StringLength(250)] 
     public string Name { get; set; } 

     [Required] 
     public string Code { get; set; } 

     public string Description { get; set; } 

     public int Category_ID { get; set; } 

     [Column(TypeName = "money")] 
     public decimal Price { get; set; } 

     public DateTime? DateCreated { get; set; } 

     public DateTime? DateModified { get; set; } 

     [Required]   
     public bool Featured { get; set; } 

     public virtual Category Category { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<OrderLine> OrderLines { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<OrderLine> ProductImage { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<SKU_Table> SKU_Table { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<XREF_CatalogProduct> XREF_CatalogProduct { get; set; } 
    } 
} 

を挿入されてそのエンティティのモデルであるコードですしかし、プロジェクトはまず誤ってデータベースとして始まりました。そして、私はそれがあまり混乱しないと考えていたので、最初にコードに変更しました。私はいくつかのことを試してみて、それを理解しているようには見えません。

UPDATE:バインドステートメントから製品IDを削除しようとしましたが、それでも問題を解決していないようです。バインドステートメントが変更されたのは以下のとおりです。

public ActionResult Create([Bind(Include = "PageURL,Name,Code,Description,Category_ID,Price,DateCreated,DateModified,Featured")] Product product) 

UPDATE は、私は私のデータベーススキーマのスクリーンショットを追加しました。私は、以下のコメントに記載されているように、そのマップされていないデータアノテーションをその読み取り専用プロパティに追加しようとしました。例外は修正されませんでした。何か不足していますか?

enter image description here

UPDATE:私は確信して私のスキーマの一致を作ってみましたが、私はそれがマップされていないことを指定するには、読み取り専用のプロパティにデータ注釈を追加し、私はまだ、この例外を取得します。私はこれに恩恵を与えるために十分な評判を持っていないし、私は本当にこの問題を理解する助けが必要です。

+0

データベースに追加するときに製品オブジェクトのIDが設定されていますか? IDをバインドしないと、追加が機能しますか? –

+0

はい、0に設定されています。バインディングを削除しようとします。 – ddeamaral

+0

@BradleyMoorfield問題をアップデートしました。それはそれを解決していないようでした。 – ddeamaral

答えて

1

データベーススキーマが表示されていないと、モデルが正しくないテーブルにマップされていると思います。あなたの財産

public string FormattedPrice { get { return this.Price.ToString("C"); } } 

は派生プロパティであり、データベースのフィールドにマップすることはできませんが、あなたはそれを無視するEFに語っていません。 [NotMapped]アノテーションを追加してみてください。同様に、すべてのプロパティに実際にデータベース内の対応するフィールドがあることを確認します。

発生する可能性のある問題を特定するためのヘルプが必要な場合は、作成するためにテーブルのDDLステートメントを自由に投稿してください。

+0

上記の私のスキーマを見ると、すべてがスキーマに正しくマップされているようです。何が問題なのか、他のアイデアはありますか?私は別のモデルを複数のレコードを正常に追加しています。 – ddeamaral

+0

私はあなたが持っているものに間違ったことは何も見ません。ソリューションをどこかにドロップすると、あなたのためにそれを見ていきます。 –

関連する問題