Я получаю следующую ошибку в нескольких разных местах при попытке Update-Database.
... может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
Кажется, что ошибка возникает в тех местах, где у меня есть несколько отношений «один ко многим» для объекта.
Я знаю, что по этому поводу были опубликованы и другие сообщения, но мне еще предстоит найти объяснение, которое действительно помогло бы мне понять эту концепцию. Не могли бы вы объяснить, как мне следует форматировать OnModelCreating
в моем DbContext
в следующих двух примерах, чтобы обеспечить желаемую функциональность?
Пример 1
Classespublic 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
Classespublic 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
удаляются.