これがどこかに答えられている場合は事前に申し訳ありませんが、私は周りを検索して答えを見つけることができませんでした.
UserProfile テーブルと Reviewer テーブルをリンクしようとしています。レビュアーはアプリケーション内のユーザーの一種であるため、2 つのテーブル間の関係は 1 (UserProfile) 対 0/1 (レビュアー) です。
UserProfile モデルは次のとおりです。
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public virtual Reviewer Reviewer { get; set; }
}
レビュアー クラス:
public class Reviewer
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
[ForeignKey("UserProfile")]
public int ReviewerID { get; set; }
public string Email { get; set; }
// other properties of Reviewer...
public virtual UserProfile UserProfile { get; set; }
}
つまり、外部キー UserId をテーブル Reviewer のキーとして、名前を ReviewerID として設定しようとしています。
流暢な API を次のように指定します。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
// other fluent API...
modelBuilder.Entity<UserProfile>()
.HasOptional(x => x.Reviewer).WithRequired(x => x.UserProfile);
}
しかし、Code First によって生成されたデータベースは、私が望んでいたものとはまったく異なります。
UserProfile テーブルに次のエントリがあるとします: UserId = 4、UserName = lostman1
Reviewer テーブルに新しいレコードを手動で挿入しようとしました: ReviewerID = 4、E メール = d@d.com
自動インクリメント フィールドであるため、データベースの ReviewerID フィールドを更新できないことがわかりました。さらに、次のエラーが表示されます。
行 4 のデータはコミットされませんでした。
エラー ソース: SQL Server Compact ADO.NET データ プロバイダー。
エラー メッセージ: 対応する主キー > 値が存在しないため、外部キー値を挿入できません。[外部キー制約名 = FK_dbo.Reviewer_dbo.UserProfile_ReviewerID]
コードの最初のセットアップの何が問題になっていますか? どうもありがとう!