使用Entity Framework和动态Json将范围标识插入第二个表

时间:2018-07-19 12:52:44

标签: c# .net json entity-framework-4 webmethod

我有两个表,如下所示 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中,以web服务web方法的动态json对象的形式获取了多个记录,如下所示(InsertData)。 通过使用IList和Entity框架,我可以插入多个记录。

我的要求是在插入客户记录时,我要从客户表中插入一些字段,并在客户贷款表中插入额外的字段。

我要插入从客户表生成的cutomerId,并在CustomerLoan表中添加更多字段。

Ex:客户

customerId  customerName    Age
100 John    32
101 Jacob   35

例如:CustomerLoan

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 };
            }
        }
    }

}

将上述代码(-1)值插入到customerLoan表的customerId字段中。 如果创建要插入的对象,则无法获取客户的foreach值之外的对象。 如果有人可以帮助将标识值的客户表插入到customerLoan中,则表示赞赏。

1 个答案:

答案 0 :(得分:0)

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

再次保存到数据库中。

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