在SQL Server上生成而不是使用Insert触发器生成具有主主键的Linq主详细信息

时间:2011-10-14 14:45:03

标签: sql-server linq linq-to-sql triggers

我有一个场景,我的主表中的主键不是标识列。它是在MS SQL Server数据库中的“代替插入”触发器上生成的。主键以varchar格式XYZ-11-001生成。我试图在主表上插入,然后使用Linq添加详细记录。我不断收到错误“无法将值NULL插入列'ParentID',表'MyDB.dbo.Child';列不允许空值.INSERT失败。”我确实正确设置了Primarykey / ForeignKey关系。

我的简化代码如下:

using (DBDataContext context = new DBDataContext())
{
    ParentTable parent = new ParentTable();
    parent.FirstName = "Joe";
    parent.LastName = "Blow";

    master.Childs = new System.Data.Linq.EntitySet<child>();
    int index = 0;

    foreach (childObj in ChildrenObj) 
    {
        Index++;
        Child child = new Child();
        parent.Childs.Add(child);
        child.ID = index;  //Foreignkey + ID are Primarykey of the child table 
        child.FirstName = childObj.FirstName;
        child.LastName = childObj.LastName;


    }

    context.parents.InsertOnSubmit(parent);
    context.SubmitChanges();
}

我已经尝试将child.Parent_ID设置为parent.ID值,但是在“而不是插入”触发器触发后似乎没有更新(即使我在添加子对象之前执行了InsertOnSubmit) 。我已经尝试将其设置为任意值,但它会抱怨,因为它不会更新child.NonIdendityColumn ForeignKey值。我甚至想做什么?对数据库中的主键使用非生成的ID值似乎很简单。

非常感谢任何帮助。

提前致谢!

1 个答案:

答案 0 :(得分:0)

问:“我想做什么甚至可能?”

答:是的,在数据​​库级......

你将OUTPUT子句用作described here,但是如何通过LINQ实现它我不知道。