Linq to Sql Родитель Ребенок - PullRequest
3 голосов
/ 24 марта 2009

хорошо, так что я новичок в C # способе ведения дел, я из мира рубинов.

У меня есть отношение один ко многим (родитель для детей по этому вопросу), и по какой-то причине L2S хотел создать нового родителя вместо того, чтобы использовать уже существующего. Вот код.


Console.WriteLine(parent.Id); // this equals 1
foreach (string names in names)
{
    Child new_child= new Child();
    new_child.Parent = parent;//now parent.Id would equal the next in the sequence.
    new_child.Name= name


    db.CommitLogs.InsertOnSubmit(new_child);
    db.SubmitChanges();
}

но если я просто скажу

new_child.ParentId = parent.Id

отлично работает.

Может кто-нибудь объяснить мне, что происходит?

PS. Родитель был найден из базы данных с использованием L2S. все ключи и тому подобное настроены правильно. Спасибо за понимание.

Ответы [ 4 ]

2 голосов
/ 24 марта 2009

Оба они должны работать:

// вариант 1:

foreach (string names in names)
{
    Child new_child= new Child();
    new_child.ParentId = parent.Id;//now parent.Id would equal the next in the sequence.
    new_child.Name= name

    db.CommitLogs.InsertOnSubmit(new_child);
    db.SubmitChanges();
}

// вариант 2:

foreach (string names in names)
{
    Child new_child= new Child();
    new_child.Name= name
    parent.Children.Add(child);
    db.SubmitChanges();
}
2 голосов
/ 24 марта 2009

Вы можете сделать это, как сказал Фредди:

foreach (string names in names)
{
    Child new_child= new Child();
    new_child.Name= name
    parent.Children.Add(child);
    db.SubmitChanges();
}

Но, возможно, просто сделайте вызов в 1 БД вне цикла foreach:

foreach (string names in names)
{
    Child new_child= new Child();
    new_child.Name= name
    parent.Children.Add(child);
}
db.SubmitChanges();
0 голосов
/ 24 марта 2009

ORM (SqlMetal или через DBML) моделирует родительский объект (и вы также заметите коллекцию дочерних элементов в родительской сущности).

Однако сущность сохраняет представление свойства столбца внешнего ключа (в данном случае ParentId), которому также можно присвоить.

Это может быть полезно, если вы знаете только идентификатор родителя (вместо загрузки родительского объекта через ваш DataContext).

AFAIK, нет немедленного недостатка в использовании прямого назначения (например, Child.Parent = Parent) или посредством назначения ID (например, Child.ParentID = ID), если (очевидно) идентификатор, который вы пытаетесь назначить, принадлежит допустимая строка в родительской таблице.

0 голосов
/ 24 марта 2009

Вы пробовали

parent.Children.Add (new_Child);

// другие вещи

// Отправить изменения.

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