0

新しいオブジェクトを作成して DB に追加する必要があります。まず、一意の ID を製品 (私のエンティティ) に設定します。そして、ユーザーが他のフィールドを設定できるビューを返します。

     public ViewResult Create()
     {
         var product = new Product { ProductID = GetFreeId() };    
         return View("Edit",product);
     }

景色:

@using (Html.BeginForm()) {
@Html.EditorForModel()
<input type="submit" value="Save" />}

次に、コントローラーを介してこのメ​​ソッドに到達します。

public void AddProduct(Product product)
{
     context.Products.Add(product);   
     context.SaveChanges();
}

最後のメソッドにブレークポイントを置くと、表示されますproduct.ProductID=10が、string context.SaveChanges();例外が発生します。

ProductID=null のエンティティを挿入できません。

エラーはどこにありますか?

4

2 に答える 2

3

キーを手動で提供する必要があり、キーがデータベースで自動生成された ID でない場合は、たとえばProductモデルのデータ注釈を使用して、これを Entity Framework に伝える必要があります。

public class Product
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ProductID { get; set; }

    //...
}

Fluent API の場合:

modelBuilder.Entity<Product>()
    .Property(p => p.ProductID)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

キーのデフォルトでintは、EF は ID がデータベースで生成され、モデルで設定されていても、EF は ID 値を DB に送信しないと想定します。INSERT ステートメントでキーを取得しないため、データベースは例外をスローします。

于 2013-03-06T20:13:55.013 に答える
0

ID が設定されていない可能性があります。post メソッドで設定する必要があります。

于 2013-03-06T20:08:47.220 に答える