linq to sql Проблема ассоциации с внешними ключами - PullRequest
4 голосов
/ 30 мая 2011

У меня есть две простые таблицы и большая проблема с внешними ключами:

  • Sale (идентификация SaleID int PK)
  • SaleDetail (идентификация SaleDetailId int PK, SaleID int FK)

, который является очень простым родителем один-ко-многим с детьми.Конечно, есть и другие поля, но они не связаны, так как они не используются в отношениях, поэтому я не включил их в списки.

Я сопоставил таблицы с классами в своем коде:

[Table()]
public class Sale
{
    [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
    public int SaleId
    {
        get;
        set;
    }

    private EntitySet<SaleDetail> saleDetails = new EntitySet<SaleDetail>();
    [Association(OtherKey = "SaleId", Storage = "saleDetails")]
    public EntitySet<SaleDetail> SaleDetails
    {
        get
        {
            return this.saleDetails;
        }
        set
        {
            this.saleDetails.Assign(value);
        }
    }

и другой:

[Table()]
public class SaleDetail
{
    [Column(IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
    public int SaleDetailId
    {
        get;
        set;
    }

    [Column()]
    public int SaleId
    {
        get;
        set;
    }

Затем я пытаюсь создать новую продажу и добавить пару дочерних объектов.

Sale s = new Sale();
s.SaleDetails.Add(new SaleDetail());
s.SaleDetails.Add(new SaleDetail());

и в последнемшаг, который я пытаюсь добавить новые объекты:

using (DataContext dc = new DataContext(Database.ConnectionString))
{
  var sales = dc.GetTable<Sale>();

  sales.InsertOnSubmit(s);
  dc.SubmitChanges();
}

следующая процедура приводит к проблеме внешнего ключа - дочерние записи добавляются со значением 0 в столбце «SaleId» (FK).Родительская запись добавляется правильно, и первичный ключ SaleId получает автоматически сгенерированное значение.Что я могу сделать, чтобы поле SaleId автоматически устанавливалось в дочерних объектах на основе значения вновь вставленного родителя?

1 Ответ

0 голосов
/ 20 июля 2011

Здесь мы склонны сначала фиксировать родительский объект, хотя, вложив транзакции, вы сможете получить автоматический первичный ключ и по-прежнему поддерживать поведение отката при ошибке.

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