【发布时间】:2016-05-28 15:03:24
【问题描述】:
public class Names
{
[Key]
public int NameID { get; set; }
[StringLength(100)]
[Index(IsUnique = true)]
[Required]
public string Name { get; set; }
}
public class People
{
[Key]
public int PeopleID { get; set; }
[Required]
public int FirstNameID { get; set; }
[ForeignKey("FirstNameID")]
public Names FirstName { get; set; }
public int MiddleNameID { get; set; }
[ForeignKey("MiddleNameID")]
public Names MiddleName { get; set; }
public int LastNameID { get; set; }
[ForeignKey("LastNameID")]
public Names LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
创建迁移并尝试更新数据库后,我收到以下错误:
Introducing FOREIGN KEY constraint 'FK_dbo.People_dbo.Names_LastNameID' on table 'People' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
无法创建约束或索引。查看以前的错误。
根据我在网上看到的其他文章,我在上下文中添加了以下内容,但它并没有达到我想要的效果。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
}
这是生成的迁移代码...
namespace MyDataSet.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class PeopleNameIDs : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Names",
c => new
{
NameID = c.Int(nullable: false, identity: true),
Name = c.String(nullable: false, maxLength: 100),
})
.PrimaryKey(t => t.NameID)
.Index(t => t.Name, unique: true);
CreateTable(
"dbo.People",
c => new
{
PeopleID = c.Int(nullable: false, identity: true),
FirstNameID = c.Int(nullable: false),
MiddleNameID = c.Int(nullable: false),
LastNameID = c.Int(nullable: false),
DateOfBirth = c.DateTime(nullable: false),
})
.PrimaryKey(t => t.PeopleID)
.ForeignKey("dbo.Names", t => t.FirstNameID, cascadeDelete: true)
.ForeignKey("dbo.Names", t => t.LastNameID, cascadeDelete: true)
.ForeignKey("dbo.Names", t => t.MiddleNameID, cascadeDelete: true)
.Index(t => t.FirstNameID)
.Index(t => t.MiddleNameID)
.Index(t => t.LastNameID);
}
public override void Down()
{
DropForeignKey("dbo.People", "MiddleNameID", "dbo.Names");
DropForeignKey("dbo.People", "LastNameID", "dbo.Names");
DropForeignKey("dbo.People", "FirstNameID", "dbo.Names");
DropIndex("dbo.People", new[] { "LastNameID" });
DropIndex("dbo.People", new[] { "MiddleNameID" });
DropIndex("dbo.People", new[] { "FirstNameID" });
DropIndex("dbo.Names", new[] { "Name" });
DropTable("dbo.People");
DropTable("dbo.Names");
}
}
}
我的目标是创建一个“People”表,其中所有 *NameID 都是 Names 表的外键。但是,只有 FirstName 是必需的。当我第一次对此进行测试时,我只有 FirstNameID 上的外键,它工作正常。但是当我将相同的内容复制/粘贴到其他名称时,这就是我现在所处的位置。
我们不胜感激。非常感谢。
【问题讨论】:
标签: asp.net-mvc ef-code-first foreign-keys entity-framework-6