【问题标题】:Conflicted with the FOREIGN KEY in One to One Relationship Entity Framework Code First与一对一关系实体框架代码优先的 FOREIGN KEY 冲突
【发布时间】:2015-12-25 21:08:34
【问题描述】:

虽然我要添加迁移,但没关系,但是当我要运行更新数据库时,我在包管理器控制台中遇到这种类型的错误

ALTER TABLE 语句与 FOREIGN KEY 约束“FK_dbo.ServiceTypes_dbo.Services_ServiceTypeID”冲突。冲突发生在数据库“Otaidea”、表“dbo.Services”、列“ServicesID”中。

我的两个模型:

public class Services
{
    [Key]
    public int ServicesID { get; set; }
    [DisplayName("Register Date")]
    public DateTime RegisterDate { get; set; }

    public int ServiceTypeID { get; set; }

    public string ApplicationUserID { get; set; }
    public virtual ServiceType ServiceType { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }

}

我的另一个表:

public class ServiceType
{
    [ForeignKey("Services")]
    public int ServiceTypeID { get; set; }
    public string NAME { get; set; }
    public virtual Services Services { get; set; }
}

【问题讨论】:

  • ForeignKey("Services") 必须进入服务实体中,位于 ServiceTypeID 属性上方
  • 我不明白你想说什么请你解释一下我是新人
  • 服务有 ServiceType。正确的?因此,您不需要在 ServiceType 中引用服务。您需要在 Service 中引用 ServiceType,并从 ServiceType 中删除 ForeignKey
  • 你能帮我重写这两个类吗,因为兄弟我英语太周了。

标签: entity-framework entity-framework-migrations


【解决方案1】:

您在模型中的关系是错误的。服务有一个“类型”,所以外键从服务类型到服务。您不需要在 ServiceType 中引用 Services

你应该像这样创建你的模型:

服务

public class Services
{
    [Key]
    public int ServicesID { get; set; }
    [DisplayName("Register Date")]
    public DateTime RegisterDate { get; set; }
    public string ApplicationUserID { get; set; }

    [ForeignKey("ServiceType")]
    public int ServiceTypeID { get; set; }
    public virtual ServiceType ServiceType { get; set; }

    public virtual ApplicationUser ApplicationUser { get; set; }    
}

服务类型

public class ServiceType
{
    [Key]
    public int ServiceTypeID { get; set; }
    public string NAME { get; set; }
}

我也会对 ApplicationUserID 属性做同样的事情,但由于你没有发布它,我就让它保持原样。

此外,如果您删除数据库并让 Entity Framework 为您重新创建它会更好。因为你有一个错误的模型关系,所以事情变得“混乱”。

【讨论】:

  • 谢谢#jpgrassi。但是 ApplicationUser 类和服务类是多对一关系,这意味着一个应用程序用户有许多服务......如何定义这种关系?我正在使用 asp.net mvc 身份框架......在这个框架中 applicationuserID 是一个 varchar/string 而不是 int ...如何定义这种关系
  • 好吧,在没有看到太多代码的情况下,我最好的猜测是,在 ApplicationUser 中你有一个服务列表。这是另一个问题,你应该写一个新的:)
  • 我的应用程序用户类继承自身份用户如何定义这种关系
  • @Hoque,我不是使用 ASP.Net 身份的专家。这就是为什么我建议你问另一个问题。这是一个不同的问题。
  • 我是堆栈溢出的新成员,这就是为什么我一天不能问一个以上的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多