我正在使用MVC3和Entity Framework Code First。 我有以下模型。
public class MyObject
{
public int Id { get; set; }
public string Name { get; set; }
public int MySubObjectId { get; set; }
public virtual MySubObject MySubObject { get; set; }
}
public class MySubObject
{
public int Id { get; set; }
public string SubName { get; set; }
}
在我的MyObject创建页面上,用户可以选择要使用的现有MySubObject,也可以创建一个新的MySubObject(在MySubObject的编辑模板中选择或创建w / auto完整文本框)。
从绑定/控制器角度处理此问题的正确方法是什么。
如果该Id无效,我应该使用MySubObject.Id并创建一个新对象吗? 我应该只使用MySubObject.SubName并在将其发回控制器时查找ID吗?
我提出的所有内容在控制器方面看起来都很混乱。
答案 0 :(得分:0)
您正在传递文字,但要建立您的关系,您需要Id,所以没有别的办法可以调用类似的东西:
var mySubObject = context.SubObjects.SingleOrDefault(o => o.Name == name);
如果返回值是实体,则可以使用它来与现有子对象建立关系。如果得到null,则表示必须创建新的子对象。只需创建一个新实例并将其分配给主对象的导航属性,就应该强制插入。
很少注意到:
Name
上定义唯一键。 EF不支持唯一键,因此您必须直接在数据库中执行 - 首先是代码use custom database initializer。答案 1 :(得分:0)
ViewBag可用于存储选择列表,然后在下拉框的视图中使用该列表。
在控制器中
ViewBag.MySubObjectId = new SelectList(db.MySubObjects, "MySubObjectId", "SubName", model.MySubObjectId);
然后在视图中
@Html.DropDownList("MySubObjectId", String.Empty)