代码之家  ›  专栏  ›  技术社区  ›  Hussain

使用实体框架和动态Json将作用域标识插入到第二个表中

  •  0
  • Hussain  · 技术社区  · 7 年前

    我有两张桌子如下 1)客户

    customerId  Int (primary key)
    customerName    Varchar(50)
    Age Int
    

    2)客户贷款

    Id  Int 
    customerId  Int (Foreign key)
    customerName    Varchar(50)
    Age Int
    Loan    float
    

    从jquery中,我得到了webservice webmethod中的动态json对象形式的多条记录,如下所示(InsertData)。 通过使用IList和实体框架,我插入了多个记录。

    我的要求是在插入customers记录时,我想从customer表中删除一些字段,并在customerloan表中添加一些字段。

    最后,我想插入从customer表生成的customerID,其中CustomerLoan表中还有几个字段。

    示例:客户

    customerId  customerName    Age
    100 John    32
    101 Jacob   35
    

    例如:客户贷款

    Id  customerId  customerName    Age Loan
    1   100 John    32  1500
    2   101 Jacob   35  2000
    
    
    
    [WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public dynamic InsertData(int revision, int appID, dynamic jsonMaster)
    {
        dynamic json = jsonMaster;
    
        IList<Customer> customers = ((object[])json).Select(t => new Customer
        {
            customerId = Convert.ToInt32((((IDictionary)t)["customerId"]) ?? -1),            
            customerName = ((((IDictionary)t)["customerName"]) ?? "").ToString(),
            Age = Convert.ToInt32(((IDictionary)t)["Age"]), 
            Revision = Convert.ToInt32((((IDictionary)t)["Revision"])),            
        }).ToList(); ;
    
    
        lock (_updatePointsLock)
        {
            using (CustomerEntities context = new CustomerEntities())
            {
                int currentRevision = context.Customer.Max(x => x.Revision) ?? 0;
                if (currentRevision >= revision)
                {
                    foreach (Customer cobj in customers)
                    {
                        Customer obj = context.Customer.Where(x => x.customerId == cobj.salesMasterId).FirstOrDefault();
                        if (obj == null)
                        {
                            cobj.Revision = currentRevision + 1;                            
                            context.Customer.Add(cobj); 
    
                **CustomerLoan objLoan = new CustomerLoan();
                objLoan.customerId = cobj.customerId;  
                objLoan.customerName = cobj.customerName;
                objLoan.Age = cobj.Age;
                objLoan.customerLoan = 1500;
                context.CustomerLoan.Add(objLoan);**
    
    
    
    
                        }
                        else
                        {
                            obj.customerName = cobj.customerName;
                            obj.Age = cobj.Age;                            
                            obj.Revision = currentRevision + 1;                          
    
                        }
                    }
                    context.SaveChanges();
    
                    return new
                    {
                        Revision = currentRevision + 1,
                        Customer = context.Customer.Where(x => x.Revision > revision).Select(x => new
                        {
                            x.customerId,
                            x.customerName,
                            x.Age,                            
                            Revision = x.Revision,                            
                        }).ToList()
                    };
                }
                else
                {
                    return new { Revision = revision };
                }
            }
        }
    

    }

    在customerLoan表的customerId字段中插入上述代码(-1)值。 如果创建对象以插入未获取的客户foreach值之外。 如果有人能帮忙在customerLoan中插入identity-value-customer表,我将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  0
  •   spartans bmk    7 年前

    首先用context.SaveChanges()将客户对象保存到数据库中; 然后尝试添加Customer loan(现在您应该可以找到Customer Id)并使用context.SaveChanges()再次保存到数据库中;

    它可能有其他的方法,但这是我知道的方式。