0

我正在尝试使用 Linq to sql 执行以下事务。

但没有检索到id字段,因此发生异常

INSERT 语句与 FOREIGN KEY 约束冲突

那么该怎么办?

我的代码:

System.Data.Common.DbTransaction transaction = null;
            DBDataContext db = new DBDataContext();
            db.Connection.Open();
            transaction = db.Connection.BeginTransaction();
            db.Transaction = transaction;

            Table1 = new Table1();
            obj.objName = "some name";
            db.Table1s.InsertOnSubmit(obj);

            Table2 obj_info = new Table2();
            obj_info.Info = "some info";
            obj_info.Id = obj.Id;
            db.Table2s.InsertOnSubmit(obj_info);
            try
            {
                db.SubmitChanges();
                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Rollback();
            }
            finally
            {
                transaction.Dispose();
                db.Dispose();
            }

编辑:也许我的代码不够清楚obj变量具有主键 Id 所以 obj.Id 是自动生成的标识,我需要将它插入到 obj_info.Id 这是外键

4

3 回答 3

1

线索应该在名称InsertOnSubmit上。您的交易未提交,因此在您尝试分配交易时没有 id。

我不清楚这些表之间的确切关系,但如果你有一个名为 obj_info 的表,其中有一个名为 objID 的列,用于在 obj 表中存储相关记录的 id,那么在你的 c# 类中你会期望有两个属性,比如

public Obj obj;
public int objID;

如果是这种情况,您可以使用

 obj_info.obj = obj;

代替

 obj_info.objID = obj.id

如果你的表不相关,那么你需要先提交 obj 才能访问 id。

于 2012-08-18T22:59:44.807 回答
1

似乎我需要在插入后使用 SubmitChanges

        System.Data.Common.DbTransaction transaction = null;
        DBDataContext db = new DBDataContext();
        db.Connection.Open();
        transaction = db.Connection.BeginTransaction();
        db.Transaction = transaction;

        Table1 = new Table1();
        obj.objName = "some name";
        db.Table1s.InsertOnSubmit(obj);
        db.SubmitChanges();

        Table2 obj_info = new Table2();
        obj_info.Info = "some info";
        obj_info.Id = obj.Id;
        db.Table2s.InsertOnSubmit(obj_info);
        db.SubmitChanges();
        try
        {
            db.SubmitChanges();
            transaction.Commit();
        }
        catch (Exception)
        {
            transaction.Rollback();
        }
        finally
        {
            transaction.Dispose();
            db.Dispose();
        }

我对此并不完全确定,但它有效

如果有人可以确认,请告诉我

于 2012-08-18T23:16:30.667 回答
0
 1. your obj_info.id has a not null value
 2. your table2 doesn't have an incremental value
the mistake came from one of those points
于 2012-08-18T22:44:32.593 回答