Я пытаюсь привести базовый объект к производному объекту класса, используя Entity Framework.
Я пытался использовать конструктор копирования. Сам конструктор работает, но фреймворк выдает ошибки.
Модельные классы:
public class Member
{
[Key]
public string SRU { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public virtual Address Address { get; set; }
}
public class Player : Member
{
public virtual PlayerPosition Position { get; set; }
public virtual Doctor Doctor { get; set; }
public virtual HealthIssue HealthIssue { get; set; }
public Player()
{
}
public Player(Member m)
{
SRU = m.SRU;
Name = m.Name;
Email = m.Email;
Address = m.Address;
}
}
Моя попытка:
DatabaseModel db = new DatabaseModel();
var val = db.Members
.FirstOrDefault(b => b.Name == "Frank");
val = new Player(val);
db.Members.Update(val);
// Save changes in database
db.SaveChanges();
Я ожидал обновить эту сущность, но выдает ошибку:
System.InvalidOperationException:
«Экземпляр типа объекта« Player »не может быть отслежен, поскольку другой экземпляр с таким же значением ключа для {'SRU'} уже отслеживается.
При присоединении существующих объектов убедитесь, что присоединен только один экземпляр объекта с данным значением ключа.
Edit:
Я пробовал, но я меняю имя, но тип все тот же.
DatabaseModel db = new DatabaseModel();
var val = db.Members
.FirstOrDefault(b => b.Name == "Yordan");
db.Entry(val).State = EntityState.Detached;
var val2 = new Player(val);
val2.Name = "Frank";
db.Members.Update(val2);
db.SaveChanges();
![Sample data](https://i.stack.imgur.com/Ge4A6.png)
Итак, я получил Участника и Игрок продлил Участника. В этом случае я хочу разыграть Member в Player.