改訂ポスト全体。Entity Frameworkで自動インクリメントIDを生成および自動生成する方法
{Username:"Bob", FirstName:"Foo", LastName:"Bar", Password:"123", Headline:"Tuna"}
が、私はこのエラーを取得していますが:
Message "Cannot insert the value NULL into column 'Id', table 'xxx_f8dc97e46f8b49c2b825439607e89b59.dbo.User'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated." string
けれども、私は手動で一緒にランダムIDを送信する場合、私はバイオリンを経由して、次のJSON POSTリクエストを投稿しようとしている
その要求はすべて良いです。同様に:
{Id:"1", Username:"Bob", FirstName:"Foo", LastName:"Bar", Password:"123", Headline:"Tuna"}
なぜEntity FrameworkはIDを生成せず、自動インクリメントするのですか?私のPOCOクラスは以下の通りです:
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Id { get; set; }
public string Username { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Password { get; set; }
public string Headline { get; set; }
public virtual ICollection<Connection> Connections { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public virtual ICollection<Phonenumber> Phonenumbers { get; set; }
public virtual ICollection<Email> Emails { get; set; }
public virtual ICollection<Position> Positions { get; set; }
}
public class Connection
{
public string ConnectionId { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
}
public class Phonenumber
{
public string Id { get; set; }
public string Number { get; set; }
public int Cycle { get; set; }
public int UserId { get; set; }
public User User { get; set; }
}
ここはコントローラメソッドです。デバッグモードでFiddler経由でリクエストを送信すると、それはdb.SaveChanges();
に壊れて、上記のエラーが表示されます。
// POST api/xxx/create
[ActionName("create")]
public HttpResponseMessage PostUser(User user)
{
if (ModelState.IsValid)
{
db.Users.Add(user);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, user);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.Id }));
return response;
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
}
何が問題なのですか。
ソリューションIDの代わりにint型とデータの注釈を削除する
変更文字列。このIDをUserIdに改名したが、これは慣例に従い、他のPOCOで必要に応じて変更を加えて変更に合わせる。引用符で囲まれた文字列で有効なJSONを投稿
コントローラをデバッグすると、ステップバイステップでdb.SaveChanges()でエラーが発生しますか?おそらくエンティティ検証エラーですか? –