В случае изменения или удаления объекта, когда он получен в другом контексте, в место изменения его состояния можно выполнить привязку к контексту с помощью метода Attach:
Phone p1;
using (PhoneContext db = new PhoneContext()) {
p1 = db.Phones.FirstOrDefault();
}
// редактирование
using (PhoneContext db = new PhoneContext()) {
if (p1 != null) {
db.Phones.Attach(p1);
p1.Price = 999;
db.SaveChanges();
}
}
// удаление
using (PhoneContext db = new PhoneContext()) {
if (p1 != null) {
db.Phones.Attach(p1);
db.Remove(p1);
db.SaveChanges();
}
}
Привязка данных к DataGridView
PhoneContext db;
// При уст. начальных значений, например, в конструкторе формы:
db = new PhoneContext();
db.Phones.Load();
dataGridView1.DataSource = db.Phones.Local.ToBindingList();
Навигационные свойства
Навигационным свойством называется свойство, связывающее сущность с другой сущностью, или набором сущностей БД.
Пример: футболисты и команды футболистов:
class Player
{
public int Id { get; set; }
public string Name { get; set; }
public string Position { get; set; }
public int Age { get; set; }
public int? TeamId { get; set; } // = Нав. Свойство + Имя ключа из связ.таб
public Team Team { get; set; } // навигационной свойство
}
class Team
{
public int Id { get; set; }
public string Name { get; set; } // название команды
public string Coach { get; set; } // тренер
public ICollection
Players { get; set; } // навигационной свойство
}
Внешний ключ позволяет получать связанные данные. Например, после генерации базы данных с помощью Code First таблица Players будет иметь следующее определение: