在FluentMigrator迁移中,如果我正在定义关系,请说:
Create.Table("RelatedTable")
.WithColumn("RelatedTableId").AsGuid().PrimaryKey()
.WithColumn("MainTableId").AsGuid().NotNullable();
.WithColumn("SomeInfo").AsString().NotNullable();
Create.Table("MainTable")
.WithColumn("MainTableId").AsGuid().PrimaryKey()
.ReferencedBy("FK_RelatedTable_RelatedTableId", "RelatedTable", "MainTableId")
.WithColumn("AField").AsInt64().NotNullable()
.WithColumn("AnotherField").AsString().NotNullable();
有没有办法定义级联删除类型之间的关系?例如,如果您从MainTable中删除了某些内容,那么任何相关记录也会被删除吗?
答案 0 :(得分:13)
您可以在同一个迁移中创建一个单独的外键,并可以选择设置级联规则:
Create.ForeignKey("FK_RelatedTable_RelatedTableId")
.FromTable("RelatedTable").ForeignColumn("RelatedTableId")
.ToTable("MainTable").PrimaryColumn("MainTableId")
.OnDeleteOrUpdate(System.Data.Rule.Cascade);
希望这有帮助。
答案 1 :(得分:1)
我能够在短时间内做到的最好的事情是执行SQL来自己创建关系。我创建了一个扩展方法来执行此操作并添加级联删除,因为这是此项目所需的唯一选项:
public static void AddCascadeDeleteRelationship(
this Migration db,
String primaryTable,
String primaryField,
String foreignTable,
String foreignField,
String relationshipName)
{
db.Execute.Sql(
String.Format(
"ALTER TABLE [{0}] ADD CONSTRAINT {1} FOREIGN KEY ( [{2}] ) " +
"REFERENCES [{3}] ( [{4}] ) ON DELETE CASCADE;",
foreignTable, relationshipName, foreignField, primaryTable, primaryField)
);
}
有更好的方法吗?