EF Codefirst Преобразование базового класса в производный класс - PullRequest
1 голос
/ 27 февраля 2012

Предположим, следующие объекты:

public class Kisi
{
    [Key]
    public int KisiID { get; set; }
    public string Ad { get; set; }
    public string Soyad { get; set; }

    public virtual ICollection<Grup> Gruplar { get; set; }
    public virtual ICollection<Kampanya> Kampanyalar { get; set; }
}

public class Musteri : Kisi
{
    public int? Yas { get; set; }
    public string Meslek { get; set; }

}

Эти два класса хранят одну таблицу (TPH) в SQL SERVER.

Я сохранил Kisi, и это может быть связано с другими таблицами.Как я могу разыграть / преобразовать / «продвинуть» его в Musteri, сохранив тот же идентификатор?Я не могу воссоздать.

Я мог бы выдать «ВСТАВКУ» SQL INSERT, но это уродливо ...

Как я могу справиться с этим, не потеряв KisiID?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Это невозможно без обхода абстракции EF. EF не позволяет вам изменять тип объекта во время выполнения. Столбец дискриминатора не открывается EF.

Что вы можете сделать, это вручную обновить соответствующую строку с помощью оператора SQL Update.

0 голосов
/ 10 сентября 2016

Попробуйте это:

var kisi=context.Kisi.Find(Id);
context.Entry(kisi).State=EntityState.Deleted;
var musteri= new Musteri()
{
    KisiID=kisi.KisiID,
    Ad=kisi.Ad,
    Soyad=kisi.Soyad,
    Gruplar= kisi.Gruplar,
    Kampanyalar=kisi.Kampanyalar,
    Meslek="Adaskdm"
}
context.Entry(musteri).State=EntityState.Added;
context.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...