通过asp MVC3 EntityFramework简单插入

时间:2012-12-20 06:00:40

标签: asp.net asp.net-mvc-3 entity-framework

我有两个具有一对多关系的简单模型

public class X{
  public int id {get;set;}
  public virtual Y y{ get; set; }
  public string description{get;set;}
}
public class Y{
  public int id{get;set;}
  public string name{get;set;}
}

从实体框架我设置了关系

我正在尝试提交一个表单,用于创建包含现有X值的新Y记录

从表单到操作的返回数据是string descriptiony_id

当我尝试从参数

指定对象时的操作
public ActionResult sth(X x){}

x.y设置为null(预期...),而当我尝试以下操作时...

x.y = (from i in Y where i.id == that_id select i).first(); 
...
db.saveChanges();

实体框架将新的Y记录插入数据库......

我知道我做错了什么......非常感谢你的帮助!

2 个答案:

答案 0 :(得分:5)

查看代码,您有x和y的ID,x中的虚拟Y.除了x中的虚拟Y,您还需要引用y的id。与y中的x的虚拟ICollection一起。

public class X{
  public int x_id {get;set;}
  public int y_id {get;set}
  public virtual Y y{ get; set; }
  public string description{get;set;}
}
public class Y{
  public int y_id{get;set;}
  public string name{get;set;}
  public virtual ICollection<X> X {get;set;}
}

这有助于实体关系。您可能还希望将y(s)列表传递给负责表单的控制器,除非您已经从表单上的下拉列表中选择了y值。

答案 1 :(得分:1)

跟踪dbContext中的Y对象似乎是一个问题。你如何生成你用linq查询的集合?你使用dbContext从数据库中获取它吗?或来自其他来源?

如果没有,则需要使用上下文或使用Attach()函数来获取它,以便正确跟踪它。

弹出另一个问题。怎么会插入一个新的Y?您是否在数据库中定义了主键?或者它是否尝试插入然后抛出异常?

这是我对此事的看法。