2012-02-27 90 views
1

假設以下實體:EF Codefirst轉換基類派生

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,這可能與其他表相關。 如何將其轉換/轉換/「提升」到Musteri,保持相同的ID?我無法重新創建。

我可以發出一個「手動」 SQL INSERT,但它是一種醜陋...

我該如何處理它沒有鬆動的KisiID?

+1

對於其他任何人遇到這樣的問題:http://stackoverflow.com/questions/12843678/converting-a-ef-codefirst-base-class-to-a-如果我執行sql查詢手動更新鑑別器字段,繼承類使用表每類型 – 2013-10-15 14:40:28

回答

1

如果不繞過EF的抽象,這是不可能的。 EF不允許您在運行時更改實體類型。鑑別器列不被EF曝光。

您可以做的是使用SQL Update語句手動更新相應的行。

+0

。在運行時是否有任何異常? – 2012-02-27 16:05:15

+0

順便說一句,我發現這篇文章http://blogs.msdn.com/b/jeff_adkins/archive/2004/03/15/89825.aspx和我困惑 – 2012-02-27 16:10:32

+0

@ErayAydoğdu如果實體,你要改變類型已被上下文加載(因此被跟蹤),因爲EF會跟蹤給定主鍵值的唯一一個實例。更改實體的類型後,最好使用新的上下文。 – Eranga 2012-02-27 16:22:06

0

試試這個:

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();