簡體   English   中英

映射子類的外鍵

[英]Mapping foreign keys of subclasses

我有以下抽象類:

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

        }
    }

Clause類從抽象類繼承:

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

        }

我的數據庫中有這個:

數據庫值

現在,我想給映射起一個合適的名字,我該怎么做呢? 我從未在抽象類和子類上進行過映射,所以在這里我有點沮喪。

一種方法是為映射列創建屬性,然后在映射類中使用映射列屬性映射虛擬屬性。

例如

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM