1

tarafından Varlık Framework TPH Discriminator sütunu oluşturun Ben Veri Annotation tarafından Discriminator sütun oluşturmak istiyorum. Veri Annotation

modelBuilder.Entity<Book>() 
      .Map<StoryBook>(m => m.Requires("typetitle").HasValue("story")); 

Fluent

tarafından

[Table("Book")] 
public partial class Book 
{ 
    public long BookID { get; set; } 

    [StringLength(100)] 
    public string name { get; set; } 

    public int? page { get; set; } 

} 

haritalama Neyse ben Veri Annotation tarafından Discriminator sütun oluşturmak istiyorum seçeneğini sonucu

cevap

0

ayırt edici sütun değeri olması gerekir.

Sen orada değil bir özellik açıklama yapamazsınız. TPH miras ile

, ayırt edici özelliği sınıf modelinin bir parçası değildir. Bunun nedeni, değerini başka bir türün değerine ayarlamak bir belirsizlik yaratacaktır: A tipi, B tipi olarak işaretlenmiş. Dolayısıyla, EF geliştiricilerin bunu yapmasını engeller.

Yani: haritalama TPH kalıtım sadece akıcı haritalama yapılabilir.

Neyse ben bu genellikle ya miras olması gerektiği gibi geçerli değildir bir sahte olduğunu kodda ayırt edici değeri gerekiyorsa seçme sonucu

yılında ayırt edici sütun değeri olması gerekir ya da miras kullanmamalısın. Kalıtımın kullanılmasına karşı bir gösterge, çalışma zamanında nesnelerin "tipinin" değiştirilmesi gerektiği durumlar olduğu zamandır (yani, ayrımcı değerinin değiştirilmesi).

+0

nasıl sonuç ayırt edici özellik değerini görebilirsiniz. 'context.Books.Find (2) ' – Hamid

+0

Dediğim gibi yapamazsınız. Açık bir mülk değil. Kalıtım iyi kullanıldığında, uğraştığınız alt türü bilmeniz gerekmez. Bu polimorfizm noktasıdır. Eğer çalışma zamanında türünü bilmeniz gerekiyorsa, tavsiyem kalıtımı kullanmak değil, bir özellik özelliğini kullanmak ve onun değerine göre hareket etmek. Ancak bu tartışma, sorunuzun kapsamı dışındadır. –

+0

BTW, 'context.Books.OfType ()' tarafından alt tipleri bir koleksiyon alabilirsiniz. –