1

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

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 descriptionand y_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记录...

我知道我做错了什么......您的帮助将不胜感激!

4

2 回答 2

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 值。

于 2012-12-20T09:36:43.227 回答
1

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

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

另一个问题出现了。怎么会插入一个新的 Y?您没有在数据库中定义主键吗?还是尝试插入然后引发异常?

这些是我对此事的看法。

于 2012-12-23T09:38:05.960 回答