2

以下のコードをご覧ください。

class Program
{
    static void Main(string[] args)
    {
        using (myContext context = new myContext())
        {
            Team t = new Team();
            t.id = 1;
            t.Name = "asd";
            context.teamSet.Add(t);
            context.SaveChanges();
        }
    }
}

public abstract class Base
{
    public virtual int id { get; set; }
}

public abstract class Player : Base
{
    public virtual string Name { get; set; }
    public virtual int Number { get; set; }
    public virtual Team team { get; set; }
    [ForeignKey("team")]
    public int teamId { get; set; }
}

public class Team : Base
{
    public ICollection<Player> Players { get; set; }
    public string Name { get; set; }
}

public class FootballPlayer : Player
{
    public double Speed { get; set; }
}

public class BasketballPlayer : Player
{
    public double Height { get; set; }
    public double Speed { get; set; }
}

public class myContext : DbContext
{
    public DbSet<Player> playerSet { get; set; }
    public DbSet<Team> teamSet { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new BaseConfiguration()).Add(new PlayerConfiguration()).Add(new TeamConfiguration()).Add(new FootballConfiguration()).Add(new BasketballConfiguration());           
    }
}

public class BaseConfiguration : EntityTypeConfiguration<Base>
{
    public BaseConfiguration()
    {
        HasKey(k => k.id);
        Property(p => p.id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    }
}

public class PlayerConfiguration : EntityTypeConfiguration<Player>
{ 
    public PlayerConfiguration()
    {
        Map(p=>{
            p.MapInheritedProperties();
        p.ToTable("Player");
        });
    }
}

public class TeamConfiguration : EntityTypeConfiguration<Team>
{
    public TeamConfiguration()
    {
        Map(p =>
        {
            p.MapInheritedProperties();
            p.ToTable("Team");
        });
    }
}

public class FootballConfiguration : EntityTypeConfiguration<FootballPlayer>
{
    public FootballConfiguration()
    {
        ToTable("FootballPlayer");
    }
}

public class BasketballConfiguration : EntityTypeConfiguration<BasketballPlayer>
{
    public BasketballConfiguration()
    {
        ToTable("BasketballPlayer");
    }
}

MyPlayerクラスとTeamClassはBasedClassから派生し、FootballPlayerとBasketballPlayerはPlayerから派生しています。ただし、生成されたデータベースでは、PlayerテーブルにFK teamIdは含まれていません。これは、共通のプロパティにすぎません。さらに、FootballPlayerテーブルとBasketballPlayerテーブルには、Playerクラスから派生したプロパティは含まれていません。誰でも助けることができますか?

4

1 に答える 1

2

どのような継承マッピングを実現しようとしていますか?現時点では、との間のTPCBaseと、およびその派生型Playerの間のTPTがあります。これらの派生型でプロパティを継承する場合は、TPCも使用する必要がありますが、その場合、データベースにテーブルはPlayerありません。PlayerプレーヤーにTPCを使用するMapInheritedPropertiesには、マッピング構成で使用する必要があります。

于 2012-05-21T07:54:32.263 に答える