ASP.NET MVC3 在controller中如何为新建的记录新建关联记录?

花了心的大萝卜 2012-08-20 01:29:35
本人新手,可能表述不太清楚,请大家原谅:

现在模型有:

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

求解释
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
之前没有理解到这条语句的用意,现在解决了,谢谢!

原因出在关联的次序问题上,MVC很强大!继续学习中~~~

[Quote=引用 1 楼 fangxinggood 的回复:]
把 actHistory.CompanyInfo = companyInfo 加上
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
真正的操作数据库的语句为
db.CompanyInfo.Add(companyInfo);
db.SaveChanges();
然而,这只是对公司记录创建的更新,并没有记录到日志

其实,你应该建一个公用的添加日志流水方法,放在BaseControl中,然后其他页面可以继承这个控制器

比如添加日志的方法为

C# code

protected void AddLog……
[/Quote]

非常感谢你的回答。
其中有一个问题比较麻烦,就是每一个日志列表会关联到创建的那个对象。
比如创建了一个CompanyInfo对象,日志的一个属性要关联这个CompanyInfo 的Id值,
如果这样,必须另外再用方法去获取数据库中的Id字段(尤其是在对象创建的时候),再写入,感觉代码不是很清爽。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
把 actHistory.CompanyInfo = companyInfo 加上
[/Quote]

尝试了一下你的建议,但问题没有解决。

在我原来的代码中
companyInfo.CompanyInfoActHistorys.Add(actHistory);

我觉得是这句出了问题,但问题不知道出在哪里。

其实我CompanyInfo对象下还有Department对象,在Create的时候,创建是成功的,这个成功是因为在前台View页面中有 Edit for CompanyInfo.Department[0] 从而使得Department也创建成功,并且自动将Department 中的CompanyId这个属性和CompanyInfo中的id属性关联。

而前台页面没有CompanyInfoActHistorys 的 Edit for 代码,所以想通过后台controller中添加这样一个对象,并且使它的CompanyInfoId 自动关联同时创建的CompanyInfo对象。

原因是机制还不了解,学习的路还长,望高手指点,非常感谢!
  • 打赏
  • 举报
回复
真正的操作数据库的语句为
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 );


机器人 2012-08-20
  • 打赏
  • 举报
回复
把 actHistory.CompanyInfo = companyInfo 加上

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧