с использованием .net 4.5.2, MVC5, Entity рамки 6 и Visual Studio 2015.Entity Framework Обновление Не Сохранение
У меня есть хранилище шаблон создан с Ninject как мой DI вот общий файл.
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();
kernel.Bind<IUserBlueRayLists>().To<UserBlueRayListRepository>().InRequestScope();
kernel.Bind<IBlueRays>().To<BlueRaysRepository>().InRequestScope();
}
мой Контекст
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public IDbSet<UserBlueRayList> UserBlueRayLists { get; set; }
public IDbSet<BlueRays> BlueRays { get; set; }
public new void SaveChanges()
{
base.SaveChanges();
}
}
public interface IDevTestContext
{
IDbSet<UserBlueRayList> UserBlueRayLists { get; set; }
IDbSet<BlueRays> BlueRays { get; set; }
void SaveChanges();
}
Тогда мой Repository обновление метод.
public bool Update(UserBlueRayList item)
{
var userBRList = _db.UserBlueRayLists.FirstOrDefault(x => x.Id == item.Id);
if(userBRList != null)
{
userBRList = item;
//_db.Entry(userBRList).State = EntityState.Modified;
_db.SaveChanges();
return true;
}
return false;
}
Теперь, когда я сохраняю через свой контроллер и вызываю метод обновления хранилища, ничего не обновляется.
Так я использовать
_db.Entry (userBRList) .State = EntityState.Modified;
Но я получаю сообщение об ошибке,
Дополнительная информация: Прикрепление объект типа «myapp.Models.UserBlueRayList» не удалось, так как другой объект того же типа, уже имеет один и тот же значение первичного ключа. Это может произойти при использовании метода «Закрепить» или установить состояние объекта в «Без изменений» или «Modified», если какие-либо объекты в графе имеют конфликтующие значения ключей и т.д. ...
Многие ко многим моделям, userlist model.
public class UserBlueRayList
{
public UserBlueRayList()
{
this.BlueRays = new HashSet<BlueRays>();
}
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
[Required]
public string UserId { get; set; }
public virtual ICollection<BlueRays> BlueRays { get; set; }
}
И
public class BlueRays
{
public BlueRays()
{
this.UserBlueRayList = new HashSet<UserBlueRayList>();
}
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
public virtual ICollection<UserBlueRayList> UserBlueRayList { get; set; }
}
Вопрос почему это обыкновение обновление, и почему его ошибки, если я пытаюсь установить состояние в модифицирована.
Строка 'userBRList = item' просто заменяет сущность, но не отслеживается вашим контекстом. – DavidG
Итак, вместо этого мне нужно заполнить его вручную, как userBrList.name = item.Name? – lemunk
Это один из способов сделать это. Вы также можете сделать это, не получив сначала сущность из базы данных, а затем добавив 'item' – DavidG