我可以在实体代码中的方法中填写两个表吗?

时间:2013-09-07 13:24:15

标签: c# entity-framework

我可以在下面的代码填写两个表吗? 地址,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;
        }

    }

1 个答案:

答案 0 :(得分: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;
        }
     }