Я получаю следующую ошибку в ряде разных мест при попытке обновить базу данных.
... может вызвать циклы или несколько каскадных путей.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
Похоже, ошибка возникает в тех местах, где у меня есть несколько отношений «один ко многим» для объекта.
Я знаю, что по этому поводу были сделаны другие сообщения, но мне еще предстоит найти объяснение, которое действительно помогает мне понять эту концепцию.Можете ли вы объяснить, как я должен форматировать OnModelCreating
в моем DbContext
в следующих двух примерах, чтобы обеспечить желаемую функциональность?
Пример 1
Классы public class Bin
{
public int Id { get; set; }
public int BarnId { get; set; }
public Barn Barn { get; set; }
public int GatewayId { get; set; }
public Gateway Gateway { get; set; }
}
public class Barn
{
public int Id { get; set; }
public ICollection<Bin> Bins { get; set; }
}
public class Gateway
{
public int Id { get; set; }
public ICollection<Bin> Bins { get; set; }
}
Миграция
migrationBuilder.CreateTable(
name: "Bins",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
BarnId = table.Column<int>(nullable: false),
GatewayId = table.Column<int>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Bins", x => x.Id);
table.ForeignKey(
name: "FK_Bins_Barns_BarnId",
column: x => x.BarnId,
principalTable: "Barns",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Bins_Gateways_GatewayId",
column: x => x.GatewayId,
principalTable: "Gateways",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
Ошибка возникает при попытке создать "FK_Bins_Gateways_GatewayId"
Требуемая функциональность: при удалении Barn
соответствующие Bins
удаляются.Когда Gateway
удален, связанные Bins
являются не удаленными
Пример 2
Классы public class Bin
{
public int Id { get; set; }
public ICollection<BinFeed> BinFeeds { get; set;}
}
public class Feed
{
public int Id { get; set; }
public ICollection<BinFeed> BinFeeds { get; set;}
}
public class BinFeed
{
public int Id { get; set; }
public bool Current { get; set;}
public int BinId { get; set; }
public Bin Bin { get; set; }
public int FeedId { get; set; }
public Feed Feed { get; set; }
}
Миграция
migrationBuilder.CreateTable(
name: "BinFeeds",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
BinId = table.Column<int>(nullable: false),
FeedId = table.Column<int>(nullable: false),
Current = table.Column<bool>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_BinFeeds", x => x.Id);
table.ForeignKey(
name: "FK_BinFeeds_Bins_BinId",
column: x => x.BinId,
principalTable: "Bins",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_BinFeeds_Feeds_FeedId",
column: x => x.FeedId,
principalTable: "Feeds",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
Ошибка возникает при попытке создать "FK_BinFeeds_Feeds_FeedId"
Требуемая функциональность:Когда Bin
удаляется, связанные BinFeeds
удаляются.При удалении Feed
связанные BinFeeds
удаляются.