我有两张桌子:
[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);
}
但是在迁移方面我遇到了错误:
ALTER TABLE语句与FOREIGN KEY约束“FK_dbo.UserProfile_dbo.Ticket_Admins_UserId”冲突。冲突发生在数据库“aspnet-BoomzHelperPortal-dbv3”,表“dbo.Ticket_Admins”,列'Id'。
我在这里做错了吗?我正在尝试做的是通过ID(TicketAdmin
)将UserProfile
映射到UserProfile.UserId = TicketAdmin.Id
感谢你的时间!
更新:
我刚尝试创建一个空数据库,这个shema发现它使UserProfile.UserId
成为一个外键列,但我需要的是TicketAdmin.Id
成为FK列。 (就像所有用户都有UserProfile一样,但并非每个人都有TicketAdmin设置,而且TicketAdmin是UserProfile的子级,并且具有与UserProfile ID相同的ID。)
答案 0 :(得分:5)
如果要添加必需的关系(不可为空的外键),则必须满足下列条件之一:
Ticket_Admins
)的表必须为空,或答案 1 :(得分:2)
这是因为您要向已包含与此约束不匹配的数据的表添加外键。尝试删除数据(如果可能)或修改数据以适应约束,否则,您需要修改约束
此外,您似乎尝试在两个主键之间添加外键,我不知道是否可能,请考虑修改Ticket_Admins表以包含UserId字段:
[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 int UserId { get; set; }
public virtual Record Name { get; set; }
public virtual TicketPost Post { get; set; }
public virtual UserProfile User { get; set; }
}
然后在UserProfile.UserId = Ticket_Admins.UserId
答案 2 :(得分: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; }
[ForeignKey("UserId")]
public virtual UserProfile User { get; set; }
}
这就是全部。现在正确生成了外键。
答案 3 :(得分:0)
如果您尝试为Existence表创建新的外键, 您需要删除存在表中的所有数据。由于每条记录都需要有一个外键,而有些记录已经创建,但没有外键。