У меня есть проблема, когда я получаю заявление о слиянии, противоречащее ограничению внешнего ключа в Efcore 7.0.20, используя .net 6. Я знаю, что это обычно вызвано, потому что внешний ключ не существует в родительской таблице. Но в моем случае родительская запись (Покупатель) добавляется одновременно с ребенком (chudeorderline), в которой ребенок используется в других отношениях (связанных работников). Я знаю, что идентификатор ребенка еще не существует, но я считаю, что он должен быть создан до отношений с связанными работниками, и я не могу понять, что я делаю неправильно, что вызывает ошибку. Я только добавляю закупоре в контекст до сохранения, потому что другие элементы содержатся/ссылаются на заказ и не добавляются вручную в контекст. У меня есть 4 класса, которые связаны с положением, покупкой, покупательскими линиями, покупками и рабочим заказом. Остальные устанавливаются в конфигурации контекста, который я включил ниже.
CupeDordlines имеет много отношений со многими отношениями с работниками, которые определяются с использованием конкретного объекта WorkorderPurchaseorder Line, в котором есть дополнительные данные, которые не имеют отношения к поставленной проблеме.
Запросы на покупку имеют отношения 1-1 с помощью SuckerOordlines.
Запросы на покупку имеют во многих отношениях со многими отношениями со многими отношениями. вызывает проблему. Я попытался исключить что -либо из кода, который не имеет значения по подходящей проблеме. < /P>
var poRequest = Context.PurchaseOrderRequests
.Include(i=>i.WorkOrders)
.Single(poReq=>poReq.Id == 139); //139 used for example, however it's normally a variable
var po = new PurchaseOrder{};
var poLine = new PurchaseOrderLine{};
poLine.RelatedWorkOrders = poRequest.WorkOrders;
po.PurchaseOrderLines.Add(poLine)
poRequest.Closed = true;
Context.Add(po);
Context.SaveChanges();
< /code>
Однако, если операция разделена следующим образом, то она работает без проблем. Тем не менее, не требуется вернуться назад и добавлять эти данные во второй операции. < /P>
var po = new PurchaseOrder{};
var poLine = new PurchaseOrderLine{};
po.PurchaseOrderLines.Add(poLine)
Context.Add(po);
Context.SaveChanges();
poRequest.Closed = true;
poLine.RelatedWorkOrders = poRequest.WorkOrders;
Context.SaveChanges();
< /code>
public class PurchaseOrder
{
public int Id { get; set; }
public ObservableCollection
PurchaseOrderLines { get; set; } = new();
}
< /code>
public class PurchaseOrderLine
{
public int Id { get; set; }
public PurchaseOrder PurchaseOrder { get; set; }
public int PurchaseOrderId { get; set; }
public ObservableCollection PurchaseOrderLineWorkOrders { get; set; } = new();
[CanBeNull] public PurchaseRequest PurchaseRequest { get; set; }
[CanBeNull] public int? PurchaseRequestId { get; set; }
public ObservableCollection RelatedWorkOrders { get; set; } = new();
}
< /code>
public class PurchaseRequest
{
public bool Closed { get; set; }
public int Id { get; set; }
[CanBeNull] public PurchaseOrderLine PurchaseOrderLine { get; set; }
[CanBeNull] public int? PurchaseOrderLineId { get; set; }
public ObservableCollection WorkOrders { get; set; } = new();
}
< /code>
public class WorkOrder
{
public ObservableCollection PurchaseOrderLines { get; set; }
public ObservableCollection PurchaseRequests { get; set; } = new();
public ObservableCollection WorkOrderPurchaseOrderLines { get; set; }
}
< /code>
public class PurchaseOrderLineConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder
.HasOne(r => r.PurchaseRequest)
.WithOne(l => l.PurchaseOrderLine)
.HasForeignKey(i => i.PurchaseOrderLineId)
.IsRequired(false)
.OnDelete(DeleteBehavior.SetNull);
}
}
public class WorkOrderConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder
.HasMany(i => i.PurchaseRequests)
.WithMany(i => i.WorkOrders);
builder
.HasMany(wo => wo.PurchaseOrderLines)
.WithMany(s => s.RelatedWorkOrders)
.UsingEntity(
r => r
.HasOne(pol => pol.PurchaseOrderLine)
.WithMany(wopol => wopol.PurchaseOrderLineWorkOrders)
.HasForeignKey(fk => fk.PurchaseOrderLineId),
l => l
.HasOne(wo => wo.WorkOrder)
.WithMany(wopol => wopol.WorkOrderPurchaseOrderLines)
.HasForeignKey(fk => fk.WorkOrderId)
);
}
}
< /code>
The exact error message I am receiving is the following.
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_WorkOrderPurchaseOrderLine_PurchaseOrderLines_PurchaseOrderLineId". The conflict occurred in database "Db", table "dbo.PurchaseOrderLines", column 'Id'.
< /code>
And the Context Debug message long version is
WorkOrderPurchaseOrderLine {Id: -2147482647} Added
Id: -2147482647 PK Temporary
PurchaseOrderLineId: -2147482647 FK Temporary
Version:
WorkOrderId: 230 FK
PurchaseOrderLine: {Id: -2147482647}
WorkOrder: {Id: 230}
PurchaseOrder {Id: -2147482647} Added
Id: -2147482647 PK Temporary Originally 282
PurchaseOrderLines: [{Id: -2147482647}]
PurchaseOrderTerms: {Id: 5}
PurchaseOrderLine {Id: -2147482647} Added
Id: -2147482647 PK Temporary Originally 481
PurchaseOrderId: -2147482647 FK Temporary Originally 282
PurchaseRequestId:
PurchaseOrder: {Id: -2147482647}
PurchaseOrderLineWorkOrders: [{Id: -2147482647}]
PurchaseRequest: {Id: 139}
RelatedOrderLines: []
RelatedWorkOrders: [{Id: 230}]
PurchaseRequest {Id: 139} Modified
Id: 139 PK
Closed: 'True' Modified Originally 'False'
PurchaseOrderLineId: -2147482647 FK Modified Temporary Originally
PurchaseOrderLine: {Id: -2147482647}
WorkOrders: [{Id: 230}]
WorkOrder {Id: 230} Unchanged
Id: 230 PK
WorkOrderPurchaseOrderLines: [{Id: 113}, {Id: -2147482647}]
PurchaseOrderLines: [{Id: 421}, {Id: -2147482647}]
PurchaseRequests: [{Id: 139}]
Подробнее здесь: https://stackoverflow.com/questions/796 ... gn-key-con
EF Core версия 7.0.20 - Заявление об сборе, противоречащее ограничению иностранного ключа ⇐ C#
Место общения программистов C#
1752253930
Anonymous
У меня есть проблема, когда я получаю заявление о слиянии, противоречащее ограничению внешнего ключа в Efcore 7.0.20, используя .net 6. Я знаю, что это обычно вызвано, потому что внешний ключ не существует в родительской таблице. Но в моем случае родительская запись (Покупатель) добавляется одновременно с ребенком (chudeorderline), в которой ребенок используется в других отношениях (связанных работников). Я знаю, что идентификатор ребенка еще не существует, но я считаю, что он должен быть создан до отношений с связанными работниками, и я не могу понять, что я делаю неправильно, что вызывает ошибку. Я только добавляю закупоре в контекст до сохранения, потому что другие элементы содержатся/ссылаются на заказ и не добавляются вручную в контекст. У меня есть 4 класса, которые связаны с положением, покупкой, покупательскими линиями, покупками и рабочим заказом. Остальные устанавливаются в конфигурации контекста, который я включил ниже.
CupeDordlines имеет много отношений со многими отношениями с работниками, которые определяются с использованием конкретного объекта WorkorderPurchaseorder Line, в котором есть дополнительные данные, которые не имеют отношения к поставленной проблеме.
Запросы на покупку имеют отношения 1-1 с помощью SuckerOordlines.
Запросы на покупку имеют во многих отношениях со многими отношениями со многими отношениями. вызывает проблему. Я попытался исключить что -либо из кода, который не имеет значения по подходящей проблеме. < /P>
var poRequest = Context.PurchaseOrderRequests
.Include(i=>i.WorkOrders)
.Single(poReq=>poReq.Id == 139); //139 used for example, however it's normally a variable
var po = new PurchaseOrder{};
var poLine = new PurchaseOrderLine{};
poLine.RelatedWorkOrders = poRequest.WorkOrders;
po.PurchaseOrderLines.Add(poLine)
poRequest.Closed = true;
Context.Add(po);
Context.SaveChanges();
< /code>
Однако, если операция разделена следующим образом, то она работает без проблем. Тем не менее, не требуется вернуться назад и добавлять эти данные во второй операции. < /P>
var po = new PurchaseOrder{};
var poLine = new PurchaseOrderLine{};
po.PurchaseOrderLines.Add(poLine)
Context.Add(po);
Context.SaveChanges();
poRequest.Closed = true;
poLine.RelatedWorkOrders = poRequest.WorkOrders;
Context.SaveChanges();
< /code>
public class PurchaseOrder
{
public int Id { get; set; }
public ObservableCollection
PurchaseOrderLines { get; set; } = new();
}
< /code>
public class PurchaseOrderLine
{
public int Id { get; set; }
public PurchaseOrder PurchaseOrder { get; set; }
public int PurchaseOrderId { get; set; }
public ObservableCollection PurchaseOrderLineWorkOrders { get; set; } = new();
[CanBeNull] public PurchaseRequest PurchaseRequest { get; set; }
[CanBeNull] public int? PurchaseRequestId { get; set; }
public ObservableCollection RelatedWorkOrders { get; set; } = new();
}
< /code>
public class PurchaseRequest
{
public bool Closed { get; set; }
public int Id { get; set; }
[CanBeNull] public PurchaseOrderLine PurchaseOrderLine { get; set; }
[CanBeNull] public int? PurchaseOrderLineId { get; set; }
public ObservableCollection WorkOrders { get; set; } = new();
}
< /code>
public class WorkOrder
{
public ObservableCollection PurchaseOrderLines { get; set; }
public ObservableCollection PurchaseRequests { get; set; } = new();
public ObservableCollection WorkOrderPurchaseOrderLines { get; set; }
}
< /code>
public class PurchaseOrderLineConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder
.HasOne(r => r.PurchaseRequest)
.WithOne(l => l.PurchaseOrderLine)
.HasForeignKey(i => i.PurchaseOrderLineId)
.IsRequired(false)
.OnDelete(DeleteBehavior.SetNull);
}
}
public class WorkOrderConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder
.HasMany(i => i.PurchaseRequests)
.WithMany(i => i.WorkOrders);
builder
.HasMany(wo => wo.PurchaseOrderLines)
.WithMany(s => s.RelatedWorkOrders)
.UsingEntity(
r => r
.HasOne(pol => pol.PurchaseOrderLine)
.WithMany(wopol => wopol.PurchaseOrderLineWorkOrders)
.HasForeignKey(fk => fk.PurchaseOrderLineId),
l => l
.HasOne(wo => wo.WorkOrder)
.WithMany(wopol => wopol.WorkOrderPurchaseOrderLines)
.HasForeignKey(fk => fk.WorkOrderId)
);
}
}
< /code>
The exact error message I am receiving is the following.
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_WorkOrderPurchaseOrderLine_PurchaseOrderLines_PurchaseOrderLineId". The conflict occurred in database "Db", table "dbo.PurchaseOrderLines", column 'Id'.
< /code>
And the Context Debug message long version is
WorkOrderPurchaseOrderLine {Id: -2147482647} Added
Id: -2147482647 PK Temporary
PurchaseOrderLineId: -2147482647 FK Temporary
Version:
WorkOrderId: 230 FK
PurchaseOrderLine: {Id: -2147482647}
WorkOrder: {Id: 230}
PurchaseOrder {Id: -2147482647} Added
Id: -2147482647 PK Temporary Originally 282
PurchaseOrderLines: [{Id: -2147482647}]
PurchaseOrderTerms: {Id: 5}
PurchaseOrderLine {Id: -2147482647} Added
Id: -2147482647 PK Temporary Originally 481
PurchaseOrderId: -2147482647 FK Temporary Originally 282
PurchaseRequestId:
PurchaseOrder: {Id: -2147482647}
PurchaseOrderLineWorkOrders: [{Id: -2147482647}]
PurchaseRequest: {Id: 139}
RelatedOrderLines: []
RelatedWorkOrders: [{Id: 230}]
PurchaseRequest {Id: 139} Modified
Id: 139 PK
Closed: 'True' Modified Originally 'False'
PurchaseOrderLineId: -2147482647 FK Modified Temporary Originally
PurchaseOrderLine: {Id: -2147482647}
WorkOrders: [{Id: 230}]
WorkOrder {Id: 230} Unchanged
Id: 230 PK
WorkOrderPurchaseOrderLines: [{Id: 113}, {Id: -2147482647}]
PurchaseOrderLines: [{Id: 421}, {Id: -2147482647}]
PurchaseRequests: [{Id: 139}]
Подробнее здесь: [url]https://stackoverflow.com/questions/79698659/ef-core-version-7-0-20-the-merge-statement-conflicted-with-the-foreign-key-con[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия