9

在 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 中删除某些内容,是否还会删除任何相关记录?

4

2 回答 2

15

您可以像这样在同一迁移中创建单独的外键,并可以选择设置级联规则:

Create.ForeignKey("FK_RelatedTable_RelatedTableId")
               .FromTable("RelatedTable").ForeignColumn("RelatedTableId")
               .ToTable("MainTable").PrimaryColumn("MainTableId")
               .OnDeleteOrUpdate(System.Data.Rule.Cascade);

希望这可以帮助。

于 2012-01-20T12:18:26.390 回答
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)
    );
}

有没有更好的办法?

于 2011-10-17T12:55:44.840 回答