Ввод основных данных Entity Framework без внешнего ключа - PullRequest
0 голосов
/ 17 января 2019

У меня есть 2 таблицы Orders & OrderDetails. Таблица Order имеет столбец идентификатора ID в качестве первичного ключа. Таблица OrderDetails имеет основной столбец таблицы Order в качестве столбца.

Я не могу использовать внешние ключи.

public class Order
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long ID { get; set; }

    public DateTime OrderDate { get; set; }
}

public class OrderDetail
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long ID { get; set; }

    public long OrderID { get; set; }
    public long ItemID { get; set; }
    public decimal Quantity { get; set; }
}

Когда я вставляю записи, я хочу получить первичный ключ таблицы Order для использования в столбце таблицы OrderDetail. Я вставляю записи в один звонок. Я хочу откатить вставку в обе таблицы, если что-то не получается.

1 Ответ

0 голосов
/ 17 января 2019

Если вы используете сгенерированные БД идентификаторы (например, IDENTITY в MS SQL), вам просто нужно добавить сущность в ObjectSet и SaveChanges для связанного ObjectContext. Идентификатор будет автоматически заполнен для вас.

using (var context = new MyContext())
{
  context.MyEntities.AddObject(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id;
}

За каждой вставкой с платформой Entity следует Select SCOPE_IDENTITY (), которая возвращает автоматически сгенерированный Id для вновь вставленной записи.

Однако вы не можете получить автоматически сгенерированный Id, прежде чем сохранить изменения в БД. Если вы хотите сделать все это за одну транзакцию, я могу предложить вам вставить записи в БД, написав пользовательскую хранимую процедуру с использованием транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...