Вставить новый дочерний + родительский с LINQ2SQL - PullRequest
3 голосов
/ 08 августа 2011

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

У меня есть два объекта, Parent и Child, определенные как таковые

[Table(Name="Parent")]
public class Parent
{
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public int ParentID { get; set; }

    [Association(OtherKey = "ParentID")]
    protected EntitySet<Child> _children = new EntitySet<Child>();
    public IList<Child> Children
    { 
        get { return _children.ToList(); }
        set { _children (value); }
    }
}

[Table(Name="Child")]
public class Child
{
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public int ChildID { get; set; }
    [Association(OtherKey = "ParentID", IsForeignKey=true)]
    [Column] public int ParentID { get; set; }

}

Основами того, что я тогда делаю, являются:

Parent newParent = new Parent();
Child newChild = new Child();
newParent.Children.Add(newChild);
parentTable.InsertOnSubmit(newParent);
parentTable.Context.SubmitChanges();

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

Если я создаю связь в БД и пытаюсь сохранить ее, это не удается, очевидно, потому что у Child с ParentID 0 будет нарушена ссылочная целостность.

Даже если я изменю вышеперечисленное на:

Parent newParent = new Parent();
Child newChild = new Child();
newChild.ParentID = newParent.ParentID;
newParent.Children.Add(newChild);
parentTable.InsertOnSubmit(newParent);
parentTable.Context.SubmitChanges();

Почему это не работает?Чего мне не хватает в Linq2SQL?

Любая помощь очень ценится!

1 Ответ

1 голос
/ 08 августа 2011

Пожалуйста, добавьте новый элемент: LINQ to SQL classes mapped to relational objects. с префиксом '.dbml' в ваш проект, а затем добавьте таблицы в интерфейс конструктора, поэтому VS автоматически создаст для вас отображение сущностей и связанные с ними отношения,
P.S.: не забудьте установить primary key для каждой таблицы, иначе ни один не будет работать идеально

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