2015-03-21 3 views
0

У меня следующий абстрактный класс:Отображение внешних ключей подклассов

public abstract class ClauseComponent 
    { 
     public int ClauseComponentId { get; set; } 
     public abstract string[] Determinate(ClimateChart chart); 
     public abstract List<ClauseComponent> GiveCorrectPath(ClimateChart chart); 

     public abstract String GetHtmlCode(Boolean isYes); 
     public virtual void Add(Boolean soort, ClauseComponent component) 
     { 
      throw new ApplicationException(); 
     } 

     public ClauseComponent() 
     { 

     } 
    } 

Класс Раздел наследует от абстрактного класса:

public class Clause : ClauseComponent 
    { 

     public virtual ClauseComponent YesClause { get; set; } 
     public virtual ClauseComponent NoClause { get; set; } 
     public String Name { get; private set; } 

     public virtual Parameter Par1 { get; set; } 
     public virtual Parameter Par2 { get; set; } 
     public int Waarde { get; set; } 
     public String Operator { get; set; } 

     public Clause() 
     { 
     } 

     public Clause(String name, Parameter par1, String op, int waarde) 
     { 
      this.Name = name; 
      this.Par1 = par1; 
      this.Operator = op; 
      this.Waarde = waarde; 
     } 

     public Clause(String name, Parameter par1, Parameter par2) 
     { 
      this.Name = name; 
      this.Par1 = par1; 
      this.Par2 = par2; 
     } 
} 

Это картографа абстрактного класса (я не имею картографа для подкласса):

public ClauseComponentsMapper() 
     { 
      ToTable("ClauseComponents"); 

      // Primary key 
      HasKey(c => c.ClauseComponentId); 

      // Properties 
      Property(c => c.ClauseComponentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     } 

у меня есть это в моей БД:

Database values

Теперь я хочу дать правильное имя картографированию, как я могу это сделать? Я никогда не делал сопоставления абстрактных классов и подклассов, поэтому я немного сижу здесь.

ответ

0

Один из способов - создать свойства для столбцов сопоставления, а в классе сопоставления - отобразить виртуальное свойство с использованием свойства столбца сопоставления.

E.g.

public class Clause : ClauseComponent 
{ 
    public int MyCustomPar1Id{ get; set; } 

    [ForeignKey("MyCustomPar1Id")] 
    public virtual Parameter Par1 { get; set; }  
} 

Или свободный Api:

modelBuilder.Entity<Clause >().HasRequired(p => p.Par1) // Or Optional 
      .HasForeignKey(p => p.MyCustomPar1Id); 
+0

Постараюсь это как можно скорее и даст вам знать, если он работал –

+0

Дайте мне знать, если это работает, я не проверял, но если память мне правильно, он должен работать –

+0

Пробовал, и не работал ... где я должен поместить код беглого api? В каком картографе? Потому что у меня только картограф абстрактного класса. –