5

最初に、この問題はWindowsフォームアプリケーションでのみ発生し、たとえばMVC3を使用したWebモードの同じプログラムが完全に機能することを述べておく必要があります。

数日前、SQLExpressデータベースを備えたVisualStudio2010Ultimateを使用して非常に単純なWindowsフォームプログラムを作成しました。同様に、[追加]>[新しいアイテム]>[サービスベースのデータベース]とこのデータベースに基づくエンティティデータモデルを選択して、データベースを追加しました。テーブルにいくつかの新しいレコードを追加するためにEntityFrameworkを使用しました。以前、VS 2008 SP1でこのようなことを問題なく行ったことがあるので、同じことを行いました。プログラムはコンパイルされ、エラーなしで実行され、いくつかの新しいデータを入力しました。プログラムを終了した後、データベースに戻りましたが、何も起こりませんでした。私が入力した情報はどれも保存されていませんでした。プログラムを段階的にデバッグしましたが、すべて問題ありませんでした。以下のコードは、上記の問題を抱えた非常に単純なプログラムに関連しています。データベースには1つのテーブル(本)があります:

namespace Book
{
    public partial class BookForm : Form
    {
        BookDatabaseEntities db = new BookDatabaseEntities();

        public BookForm()
        {
            InitializeComponent();
        }

        private void saveButton_Click(object sender, EventArgs e)
        {
            Book bookToCreate = new Book();

            bookToCreate.Id = Guid.NewGuid();
            bookToCreate.Title = titleTextBox.Text;

            db.Books.AddObject(bookToCreate);
            db.SaveChanges();
        }
    }
}

誰か助けてくれたらとてもありがたいです。前もって感謝します。

................。

編集後:

namespace Book
{
    public partial class BookForm : Form
    {
        //BookDatabaseEntities db = new BookDatabaseEntities();

        public BookForm()
        {
            InitializeComponent();
        }

        private void saveButton_Click(object sender, EventArgs e)
        {
            var db = new BookDatabaseEntities();
            var bookToCreate = db.Books.CreateObject();

            //Book bookToCreate = new Book();

            bookToCreate.Id = Guid.NewGuid();
            bookToCreate.Title = titleTextBox.Text;

            db.AcceptAllChanges();
            db.Books.AddObject(bookToCreate);
            db.SaveChanges();
        }
    }
}
4

2 に答える 2

3

最後に、たくさんの検索と質問をした後、 PatriceScribeのおかげでMSDNフォーラムで解決策を見つけました。ここで 確認でき ます。

于 2011-09-18T04:12:48.017 に答える
1

これを試して:

db.Attach(bookToCreate);
db.SaveChanges();

編集:

このコードは本番環境のクラスライブラリ(私のDAL)にあり、正常に機能します。

using (var dbContext = new DbEntities())
    {
        var job = dbContext.RiskToolJob.CreateObject();

        job.AnalysisDataID = analysisDataID;

        job.JobRmsAnalysisID = RMSAnalysisID;
        job.UserName = userName;

        job.JobCreated = DateTime.UtcNow;

        dbContext.RiskToolJob.AddObject(job);

        dbContext.SaveChanges();

        return job.DataId;
    }

PK( DataId )はデータベースによって割り当てられるため、実際には割り当てないことに注意してください。呼び出し元に返すので、saveメソッドを呼び出した人は、必要に応じて自動生成されたIDを知ることができます。

于 2011-09-07T06:44:58.820 に答える