0

我可以在下面的代码中填写两个表格吗?Address , Cod , Cost 应填写 tbl_Reciver。但是 Lname 、 Name 、 Tell 应该填写 Tbl_Sender。我可以在这里填两张桌子吗?

    public static bool InsertInTables(string Address, string Cod, int? cost,string Lname, string Name, string Tell )

        {
        MyContext db = new MyContext();
        try
        {

           //Can i fill Tbl_Sender like tbl_Reciver here 
            var tbl1 = new tbl_Reciver

            {
                id = MaxIdInTbl (),
                Address_s = Address,
                Cod_s = Cod,
                Cost_s = cost,

                  //i wanna fill below fields in tbl_Sender
                  // Lname_s = Lname,
                  // Name_s = Name,
                  //Tell_s = Tell,


            };

              //is it possible i fill two tables ?
            db.tbl_Reciver.Add(tbl1);
            db.SaveChanges();

            return true;

        }
        catch
        {
            return false;
        }

    }
4

1 回答 1

0

SaveChanges当它看到两者都是新的并且它们是相关的时,它会为您完成所有这些。它还使用模型的映射来确定哪个是依赖实体并且需要外键。使用此信息,它以正确的顺序执行数据库插入。

注意:如果您使用 DbFirst 方法为现有数据库创建上下文,它也会自动生成模型。

但是如果你有任何约束,你应该使用覆盖以下方法来定义模型。

protected virtual void OnModelCreating(
    DbModelBuilder modelBuilder
)

那么您可以使用相同的事务保存您的实体。如果任何失败自动回滚事务本身。

      Using(MyContext db = new MyContext())
      {
        try
        {
            var tbl1 = new tbl_Reciver
            {
                id = MaxIdInTbl (),
                Address_s = Address,
                Cod_s = Cod,
                Cost_s = cost,
            };

            long maxId=MaxIdInTbl();
            var tbl2= db.tbl_Sender.FirstOrDefault(x => x.id == maxId);

            tbl2.Lname_s = Lname;
            tbl2.Name_s = Name;
            tbl2.Tell_s = Tell;

            db.Refresh(RefreshMode.StoreWins,tbl2);
            db.tbl_Reciver.Add(tbl1);

            db.SaveChanges();
            return true;
        }
        catch
        {
            return false;
        }
     }
于 2013-09-07T14:14:21.147 回答