EF Codefirst将基类转换为派生类
本文关键字:派生 转换 基类 Codefirst EF | 更新日期: 2023-09-27 18:26:00
假设以下实体:
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; }
}
这两个类在SQL SERVER中存储一个表(TPH)。
我保存了一个Kisi,这可能与其他桌子有关。如何在保持相同ID的情况下将其转换为Musteri?我无法重现。
我可以发布一个"手动"SQL INSERT,但它有点难看。。。
如何在不丢失KisiID的情况下处理它?
如果不绕过EF的抽象,这是不可能的。EF不允许您在运行时更改实体类型。EF不暴露鉴别器列。
您可以使用SQLUpdate语句手动更新相应的行。
试试这个:
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();