使用LINQ2SQL插入新的子+父

时间:2011-08-08 10:04:00

标签: linq linq-to-sql

与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();

如果我删除数据库中两个表之间的关系并保存,则保存好。除了Child记录中的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 个答案:

答案 0 :(得分:1)

请为项目添加一个前缀为LINQ to SQL classes mapped to relational objects.的新项'.dbml',然后将表添加到设计器界面,这样VS将自动创建实体映射和相关关系你,
P.S.:不要忘记为每个表设置primary key,否则一切都不会完美