私は2つのテーブルを持っています:
[Table("Ticket_Admins")]
public class TicketAdmin
{
public TicketAdmin()
{
Name = new Record();
Name.IsRevisioned = false;
Name.IsVisible = true;
Name.Category = typeof(TicketAdmin).Name;
}
[Key]
public int Id { get; set; }
public virtual Record Name { get; set; }
public virtual TicketPost Post { get; set; }
public virtual UserProfile User { get; set; }
}
[Table("UserProfile")]
public class UserProfile
{
private string _email;
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string Email
{
get { return _email; }
set { _email = value.ToLower(); }
}
}
そして、それらをコンテキストにマッピングします。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TicketAdmin>()
.HasRequired(x => x.User)
.WithRequiredPrincipal();
base.OnModelCreating(modelBuilder);
}
しかし、移行時にエラーが発生します:
ALTERTABLEステートメントがFOREIGNKEY制約「FK_dbo.UserProfile_dbo.Ticket_Admins_UserId」と競合しました。データベース「aspnet-BoomzHelperPortal-dbv3」、テーブル「dbo.Ticket_Admins」、列「Id」で競合が発生しました。
私はここで何か間違ったことをしていますか?私が正確にやろうとしているのは、ID()でMyTicketAdmin
をマップすることです。UserProfile
UserProfile.UserId = TicketAdmin.Id
あなたの時間のためにあなたをありがとう!
更新:このシェマで空のデータベースを作成しようとしたところUserProfile.UserId
、外部キー列が作成されることがわかりましたが、必要なTicketAdmin.Id
のはFK列になることです。(すべてのユーザーがUserProfileを持っているようですが、すべてのユーザーがTicketAdmin設定を持っているわけではなく、TicketAdminはUserProfileの子であり、UserProfile IDと同じIDを持っています)。