C# CodeFirst表没有像我预期的那样生成
我有一个名为Status的类,还有一个名为applicationpositionhistory的类,它有一个OldStatus和一个NewStatus 但是,该表是这样生成的: 我希望该表有一个newstatusid和oldstatusid,它们应该是外键,但它生成了两个重复的列C# CodeFirst表没有像我预期的那样生成,c#,entity-framework,entity-framework-4,entity-framework-4.1,ef-code-first,C#,Entity Framework,Entity Framework 4,Entity Framework 4.1,Ef Code First,我有一个名为Status的类,还有一个名为applicationpositionhistory的类,它有一个OldStatus和一个NewStatus 但是,该表是这样生成的: 我希望该表有一个newstatusid和oldstatusid,它们应该是外键,但它生成了两个重复的列 public class ApplicationPositionHistory { [DatabaseGenerated(System.ComponentModel.DataAnnotati
public class ApplicationPositionHistory
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int ApplicationPositionHistoryID { get; set; }
public ApplicantPosition applicantPosition { get; set; }
[Column("oldStatusID")]
public int oldStatusID { get; set; }
[Column("newStatusID")]
public int newStatusID { get; set; }
public Status oldStatus { get; set; }
public Status newStatus { get; set; }
[StringLength(500, MinimumLength = 3, ErrorMessage = "Comments should not be longer than 500 characters.")]
[Display(Name = "Comments")]
public string comments { get; set; }
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[Display(Name = "Date")]
public DateTime dateModified { get; set; }
}
public class Status
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int StatusID { get; set; }
[StringLength(40, MinimumLength = 3, ErrorMessage = "Status should not be longer than 20 characters.")]
[Display(Name = "Status")]
public string status { get; set; }
}
我认为问题在于您的非标准命名约定,这会导致在应用默认映射约定时出现问题,因此您的FK列不会与导航属性配对,EF会创建新的属性 尝试以下操作以手动将导航属性与FK属性配对:
[ForeignKey("oldStatusID")]
public Status oldStatus { get; set; }
[ForeignKey("newStatusID")]
public Status newStatus { get; set; }
我认为问题在于您的非标准命名约定,这会导致在应用默认映射约定时出现问题,因此您的FK列不会与导航属性配对,EF会创建新的属性 尝试以下操作以手动将导航属性与FK属性配对:
[ForeignKey("oldStatusID")]
public Status oldStatus { get; set; }
[ForeignKey("newStatusID")]
public Status newStatus { get; set; }
这是我运行应用程序时得到的结果。在表“ApplicationPositionHistory”上引入外键约束“ApplicationPositionHistory\u oldStatus”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。\r\n无法创建约束。请参阅前面的错误。“}我可以使用.modelBuilder.Conventions.Remove()修复此问题;在OnModelCreating中,这可能发生,但只能通过-属性解决。属性不提供关闭级联删除的方法。删除约定将关闭级联删除。这是我在所有数据库中想要的。我发现了一篇关于所有fluent api示例的好博文,我确信在发布任何其他示例之前,我会检查它r关于数据库创建的问题。将粘贴到此处供将来的访问者参考。这是我运行应用程序时得到的结果。在表“ApplicationPositionHistory”上引入外键约束“ApplicationPositionHistory\u oldStatus”可能会导致循环或多个级联路径。请在删除时指定“无操作”,或在更新时指定“无操作”,或修改其他外键约束。\r\n无法创建约束。请参阅以前的错误。“}我可以用修复此问题。modelBuilder.Conventions.Remove();在OnModelCreating中,这可能发生,但只能通过-属性解决。属性不提供关闭级联删除的方法。删除约定将关闭级联删除。这是我在所有数据库中想要的,我发现了一篇关于所有fluentapi示例的好博客文章,我相信在发布关于数据库创建的任何其他问题之前,我会先检查一下。我会把它贴在这里,供将来的访客参考。