本人新手,可能表述不太清楚,请大家原谅:现在模型有:public class CompanyInfo
    {
        [Key]
        [Column("id")]
        public int id { get; set; }        public virtual List<CompanyInfoActHistory> CompanyInfoActHistorys { get; set; } //客户流水记录表
                //省略部分字段……
    }以及:    public class CompanyInfoActHistory
    {
        [Key]
        public int id { get; set; }        [Column("CompanyId")]
        public int CompanyInfoId { get; set; }        [Column("Actdate")]
        public DateTime Actdate { get; set; }        [Column("UserId")]
        public int OperatorId { get; set; }        [Column("ip")]
        public string IP { get; set; }        [Column("Content")]
        public string Content { get; set; }        public virtual CompanyInfo companyInfo { get; set; }        public virtual Operator Operator { get; set; }
    }
个人想在创建公司记录的同时,创建日志流水,记录在表CompanyInfoActHistory中
在Create方法中按如下方法写,可是写不进去。[HttpPost]
        public ActionResult Create(CompanyInfo companyInfo)
        {
            if (ModelState.IsValid)
            {
                CompanyInfoActHistory actHistory = new CompanyInfoActHistory()
                {
                    Actdate = System.DateTime.Now,
                    OperatorId = Convert.ToInt32(System.Web.HttpContext.Current.Request.Cookies["POM"]["Adminid"]),
                    IP = System.Web.HttpContext.Current.Request.UserHostAddress == null ? "" : System.Web.HttpContext.Current.Request.UserHostAddress,
                    Content = this.SetContent()
                };
                companyInfo.CompanyInfoActHistorys.Add(actHistory);                db.CompanyInfo.Add(companyInfo);
                db.SaveChanges();
                return Content("成功新建记录", "text/html");
            }
            return Content("未成功新建记录", "text/html");
        }求解释

解决方案 »

  1.   

    把  actHistory.CompanyInfo = companyInfo 加上
      

  2.   

    真正的操作数据库的语句为
    db.CompanyInfo.Add(companyInfo);
                    db.SaveChanges();
    然而,这只是对公司记录创建的更新,并没有记录到日志其实,你应该建一个公用的添加日志流水方法,放在BaseControl中,然后其他页面可以继承这个控制器比如添加日志的方法为
     protected void AddLog(CompanyInfoActHistory model)
            {
                /*这里假设日志表为Log
                 *  db.Log.Add(model);
                    db.SaveChanges();//将日志添加入库
                 */
            }然后调用db.CompanyInfo.Add(companyInfo);
                    db.SaveChanges();
    AddLog(actHistory );
      

  3.   


    尝试了一下你的建议,但问题没有解决。在我原来的代码中
    companyInfo.CompanyInfoActHistorys.Add(actHistory);我觉得是这句出了问题,但问题不知道出在哪里。其实我CompanyInfo对象下还有Department对象,在Create的时候,创建是成功的,这个成功是因为在前台View页面中有 Edit for CompanyInfo.Department[0] 从而使得Department也创建成功,并且自动将Department 中的CompanyId这个属性和CompanyInfo中的id属性关联。而前台页面没有CompanyInfoActHistorys 的 Edit for 代码,所以想通过后台controller中添加这样一个对象,并且使它的CompanyInfoId 自动关联同时创建的CompanyInfo对象。原因是机制还不了解,学习的路还长,望高手指点,非常感谢!
      

  4.   


    非常感谢你的回答。
    其中有一个问题比较麻烦,就是每一个日志列表会关联到创建的那个对象。
    比如创建了一个CompanyInfo对象,日志的一个属性要关联这个CompanyInfo 的Id值,
    如果这样,必须另外再用方法去获取数据库中的Id字段(尤其是在对象创建的时候),再写入,感觉代码不是很清爽。
      

  5.   

    之前没有理解到这条语句的用意,现在解决了,谢谢!原因出在关联的次序问题上,MVC很强大!继续学习中~~~