在我的模型中,我有两个类别和产品.他们之间存在着许多关系.我正在使用实体框架的代码优先方法.我正在尝试创建一个编辑类别和产品之间映射的函数,但是我收到了一个错误.
IEntityChangeTracker的多个实例不能引用实体对象.
我发现在实体框架中关闭连接后,实体仍在跟踪.
所以我假设我必须从ObjectContext手动分离实体,但我的解决方案不起作用.这是我的控制器代码
public ActionResult Edit(int id)
{
Product product = db.Products.Find(id);
ViewData["categories"] = _categories.GetAllCategories();
ViewBag.CompanyID = new SelectList(db.Companies, "CompanyID", "Name", product.CompanyID);
return View(product);
}
[HttpPost]
public ActionResult Edit(FormCollection collection, Product product)
{
if (ModelState.IsValid)
{
_product.UpdateProduct(product);
_product.EditMappingProductCategories(collection, product.ProductID);
return RedirectToAction("ProductsList");
}
ViewBag.CompanyID = new SelectList(db.Companies, "CompanyID", "Name", product.CompanyID);
ViewData["categories"] = _categories.GetAllCategories();
return View(product);
}
Run Code Online (Sandbox Code Playgroud)
我的服务层功能.我从表单收集新的类别,并根据结果我编辑产品.
public void EditMappingProductCategories(FormCollection collection , int pro)
{
using (EFDbContext context = new EFDbContext())
{
List<Category> list = new List<Category>();
Product product = …Run Code Online (Sandbox Code Playgroud) 嗨,我不知道为什么它不起作用.看起来我无法在InkCanvas上使用此事件.
XAML
<Window x:Class="PolyLine.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel >
<Button Name="Button1">Clear</Button>
<InkCanvas x:Name="MC" MouseLeftButtonDown="MC_MouseLeftButtonDown" MouseRightButtonDown="MC_MouseRightButtonDown" MouseMove="MC_MouseMove" Background="White" Height="300" Width="497" ></InkCanvas>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
代码背后
private void MC_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
polylinePoints.Add(e.GetPosition(MC));
}
Run Code Online (Sandbox Code Playgroud)