WebApiアクションを使用してEntity Frameworkを使用してアイテムを挿入しようとしています。コンテキストはアイテムが保存されたことを示すようですが、基になるデータベースにチェックインするとアイテムは保存されませんでした。WebApiコールでエンティティがデータベースに保存されない
public class HelpRequestController : ApiController
{
public HttpResponseMessage PostHelpRequest(HelpRequest item)
{
var context = new MyDbContext();
try
{
using (var newcontext = new MyDbContext())
{
newcontext.HelpRequests.Add(item);
newcontext.SaveChanges();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
var response = Request.CreateResponse<HelpRequest>(HttpStatusCode.Created, item);
string uri = Url.Link("DefaultApi", new { id = 0 });
response.Headers.Location = new Uri(uri);
return response;
}
マイコンテキスト:
public class MyDbContext : DbContext
{
public DbSet<HelpRequest> HelpRequests { get; set; }
}
PostHelpRequestでHelpRequestパラメータが正しく解決され
ここ
はアクションである(それは郵便配達本体データに私が含まれたものと一致します)私の生成モデル:public partial class HelpRequest
{
public int Id { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public System.DateTime CreateDate { get; set; }
public Nullable<bool> Responded { get; set; }
}
私は郵便配達を経由して、これをテストしていて、私の身体データを生、JSON
{"Title":"Title1","Message":"Message1","CreateDate":"2017-02-05T10:03:35.258"}
に設定されているデータベース内のID列は、プライマリおよびアイデンティティとして設定されています。
編集:私は問題を発見した
が、それを解決する方法がわかりません。
コードをステップ実行してnewcontext.Database.ConnectionStringを見ると、SQLExpressデータベースを参照しています。プロジェクト用に作成されたようです。
しかし、モデルを開いて接続文字列を見ると、正しいサーバーとデータベースを参照しています。
なぜコンテキストに間違った接続文字列が割り当てられていますか?
編集:接続文字列とコンテキストコンストラクタ
<connectionStrings>
<add name="connname1" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=servername;initial catalog=mydatabase1;user id=andrewb;password=hahayeahright;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
コンストラクタ:
public MyDbContext()
{
Database.Log = sql => System.Diagnostics.Debug.Write(sql);
}
最終編集:解決策は、私は、接続文字列の名前と私のコンテキスト内でコンストラクタを設定する必要がありますということでした私は使いたい。イゴールの答えを見てください。
SQL文のロギングを有効にしていますか?ログでINSERT文はどのように見えますか? –
サイドノート: 'throw new Exception(ex.Message);を' throw 'に変更するか、 'catch'ブロック全体を削除します。 'throw;'はスタックトレースを元のExceptionに保存しますが、既存のステートメントはそれをリセットします。例外は例外がスローされた理由を把握しようとしています。 – Igor
私は同意します、これは最初に動作するようになっていますが、例外がスローされないことを確認できます。 – andrewb