エンティティフレームワークを使用し、コードを最初に使用する整数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 は、私は私のデータベーススキーマのスクリーンショットを追加しました。私は、以下のコメントに記載されているように、そのマップされていないデータアノテーションをその読み取り専用プロパティに追加しようとしました。例外は修正されませんでした。何か不足していますか?
UPDATE:私は確信して私のスキーマの一致を作ってみましたが、私はそれがマップされていないことを指定するには、読み取り専用のプロパティにデータ注釈を追加し、私はまだ、この例外を取得します。私はこれに恩恵を与えるために十分な評判を持っていないし、私は本当にこの問題を理解する助けが必要です。
データベースに追加するときに製品オブジェクトのIDが設定されていますか? IDをバインドしないと、追加が機能しますか? –
はい、0に設定されています。バインディングを削除しようとします。 – ddeamaral
@BradleyMoorfield問題をアップデートしました。それはそれを解決していないようでした。 – ddeamaral