Как предотвратить установку иностранных ключей NULL после вызова удаления на объектеC#

Место общения программистов C#
Ответить
Anonymous
 Как предотвратить установку иностранных ключей NULL после вызова удаления на объекте

Сообщение Anonymous »

У меня есть таблица заказа , которая содержит нулевой внешний ключ для другой таблицы под названием Product (каждый заказ может сопоставить только один продукт). Каждый заказ будет указывать только на один продукт. Соотношение настроено Fluent API, как показано здесь (в структуре объекта 6.1.3): < /p>

Код: Выделить всё

public class OrderConfiguration : EntityTypeConfiguration
{
public OrderConfiguration()
{
// the same issue still happens if switched to 'HasRequired'
HasOptional(o => o.Product)
.WithMany()
.HasForeignKey(o => o.ProductKey)
.WillCascadeOnDelete(false);
}
}
Теперь, когда я вызову remove (или Removerange ) При заказе, почему он устанавливает продукт Forement Key ProductKey в порядке на NULL? Что приводит к тому, что это поведение происходит, и как мне это предотвратить? Он предназначен для каскада для зависимых сущностей при удалении основной сущности, а не наоборот. < /P>
Почему это поведение существует? Я действительно должен скопировать объект или хранить значение иностранных ключей перед удалением?public Order RemoveOrder(int orderID)
{
using (var context = new MyDBContext())
{
var order = context.Order
.Where(o => o.OrderID == orderID)
.FirstOrDefault();

if (order == null)
return null;

// Here foreign key `productKey` on `order` is not null yet
var removed = context.Orders.Remove(order);
// Now `productKey` on both 'order' and 'removed' are null

context.SaveChanges();
return removed;
}
}
< /code>
Это предприятия, если это необходимо! (Не существует другой конфигурации для этого навигационного свойства, за исключением того, что показано выше. Насколько я вижу, также нет никакого удаления или какого-либо ограничения в DB.public class Order
{
[Key]
public int OrderID { get; set; }
public int? ProductKey { get; set; }
public string PONumber { get; set; }
public virtual Product Product {get; set; }
}

public class Product
{
[Key]
public int ProductKey { get; set; }
public string ProductName { get; set; }
}
< /code>

Для контекста I рефакторировал класс, который первоначально использовал TableAdapters. В некоторых случаях он следует за этой шаблоном (повторно зазора данных, удаляйте и возвращайте данные, используя удаленные выводы.*). Эти ошибки не пойманы тестами и заставляют некоторые методы всегда возвращать фальтику>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -an-entity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»