20

SQL テーブルに新しいレコードを挿入したいと考えています。私は試した:

        public void CreateComment(int questionId, string comment)
        {
            QuestionComment questionComment = context.TableName.Create();//1*
            questionComment.propertyThatIsNotAConstraint= questionId;
            questionComment.body = comment;
            context.QuestionComments.Add(questionComment);
            context.SaveChanges();//ERROR...
        }

1* インテリセンスが次のように言うのを見て驚いています :

エラーの読み取り:

"PRIMARY KEY 制約 'PK_TableName' に違反しています。オブジェクト 'dbo.TableName' に重複キーを挿入できません。重複キーの値は (0) です。\r\nステートメントは終了しました。"

問題は、questionCommentその PK:questionComment.Idがデフォルトで に設定されていること0です。それは、次に利用可能な ID であるか、そうでなければ入力されず、「通常の」ID 挿入を行う必要があります。

エンティティ フレームワークは、このシーンをどのように処理することを期待していますか?

要求どおり:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

    namespace Feedback.Models
    {
        using System;
        using System.Collections.Generic;

        public partial class QuestionComment
        {
            public int id { get; set; }
            public int questionId { get; set; }
            public string body { get; set; }
            public int commentIndex { get; set; }
        }
    }
4

2 に答える 2

4

EF のドキュメントには、次のように構成された列に行が挿入されると、データベースが値を生成すると記載されています。propConfig.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)

http://msdn.microsoft.com/en-us/library/hh829109(v=vs.103).aspx

言い換えると。newCommentObject.IdEF は、データベースに挿入するときに値が何であるかを気にしません。代わりに、データベースが次の ID 値を生成できるようにします。

于 2013-04-29T19:21:02.460 に答える