我可以使用带导航 属性 的 EF class 作为我的控件的数据源吗?
Can I use EF class with navigational property as a datasource for my control?
我有一个 Kendo DrowpDownList,我使用 EF class 作为它的数据源。
@(Html.Kendo().DropDownList()
.Name("myCars")
.OptionLabel("--- Select Cars ---")
.DataValueField("ID")
.DataTextField("DESCRIPTION")
.HtmlAttributes(new { style = "width: 500px" })
.DataSource(s =>
{
s.Read(r =>
{
r.Action("GetAllCars", "Home");
});
})
)
当 table MY_CARS 是唯一的 table.
时,这很好用
public static List<MY_CARS> GetAllCars()
{
using (var context = new Entities())
{
return context.MY_CARS.ToList();
}
}
我一更改模型,相同的代码就不再有效。
我将模型更改为:
MY_CARS:
ID NAME DESCRIPTION
MY_USER
ID NAME EMAIL
MY_USER_CARS
ID USER_ID CAR_ID
*USER_ID has a FK to MY_USER.ID
*CAR_ID has a FK to MY_CARS.ID
我认为导航属性现在给我带来了问题。
有没有办法仍然绑定到相同的 class 抑制导航 属性 或者我必须将我的 MY_CARS class 映射到另一个 class?
不太可能使用这种方式,因为这更多是关于 SmartUI 反模式和另一个对象,视图模型会更好地完成这项工作。字段的映射通常使用诸如 Automapper 之类的工具来完成。
可能以下内容会有所帮助,应用 AsNoTracking()
:
public static List<MY_CARS> GetAllCars()
{
using (var context = new Entities())
{
return context.MY_CARS.AsNoTracking().ToList();
}
}
我有一个 Kendo DrowpDownList,我使用 EF class 作为它的数据源。
@(Html.Kendo().DropDownList()
.Name("myCars")
.OptionLabel("--- Select Cars ---")
.DataValueField("ID")
.DataTextField("DESCRIPTION")
.HtmlAttributes(new { style = "width: 500px" })
.DataSource(s =>
{
s.Read(r =>
{
r.Action("GetAllCars", "Home");
});
})
)
当 table MY_CARS 是唯一的 table.
时,这很好用public static List<MY_CARS> GetAllCars()
{
using (var context = new Entities())
{
return context.MY_CARS.ToList();
}
}
我一更改模型,相同的代码就不再有效。
我将模型更改为:
MY_CARS:
ID NAME DESCRIPTION
MY_USER
ID NAME EMAIL
MY_USER_CARS
ID USER_ID CAR_ID
*USER_ID has a FK to MY_USER.ID
*CAR_ID has a FK to MY_CARS.ID
我认为导航属性现在给我带来了问题。
有没有办法仍然绑定到相同的 class 抑制导航 属性 或者我必须将我的 MY_CARS class 映射到另一个 class?
不太可能使用这种方式,因为这更多是关于 SmartUI 反模式和另一个对象,视图模型会更好地完成这项工作。字段的映射通常使用诸如 Automapper 之类的工具来完成。
可能以下内容会有所帮助,应用 AsNoTracking()
:
public static List<MY_CARS> GetAllCars()
{
using (var context = new Entities())
{
return context.MY_CARS.AsNoTracking().ToList();
}
}