我尝试以这种方式更新实体,但我收到有关Keys的错误。
我想知道如何在参数或方法内部获取实体产品的关系。我认为是解决方案。
public static bool UpdateProduct( Product myProduct , int[] newCategoriesID )
{
bool operation = false;
using ( var ctx = new TestContext() )
{
ctx.Entry( myProduct ).State = EntityState.Modified;
var newCategories = ctx.Categories.Where( c => newCategoriesID.Contains( c.id ) ).ToList();
myProduct.Categories.Clear();
foreach ( var newCat in newCategories )
{
myProduct.Categories.Add( newCat );
}
ctx.Products.Attach( myProduct );
int countChanges = ctx.SaveChanges();
if ( countChanges > 0 )
{
operation = true;
}
}
return operation;
}
我使用的是ASP.NET MVC 5和最新版本的Entity Framework。
答案 0 :(得分:0)
此解决方案有效,但我不知道它是否正常
public static bool UpdateProduct( Product myProduct , int[] newCategoriesID )
{
bool operation = false;
using ( var ctx = new TestContext() )
{
//find the product in the database and include the relation
var existeproduct = ctx.Products.Include("Categories").SingleOrDefault(x=>x.id == myProduct.id);
// Change the current and original values by copying the values from other objects
ctx.Entry( existeproduct ).CurrentValues.SetValues(myProduct);
ctx.Entry( existeproduct ).State = EntityState.Modified;
var newCategories = ctx.Categories.Where( c => newCategoriesID.Contains( c.id ) ).ToList();
existeproduct.Categories.Clear();
foreach ( var newCat in newCategories )
{
existeproduct.Categories.Add( newCat );
}
int countChanges = ctx.SaveChanges();
if ( countChanges > 0 )
{
operation = true;
}
}
return operation;
}