次のコードを試してみましたが、以下のエラーが発生しました。
エラー 3013: 17 行目から始まるフラグメントのマッピングに問題があります: テーブル マッピングがありません: テーブル Cities (CountryId) からテーブル CountryBase (Id) への外部キー制約 'CountryBase_Cities1': テーブル CountryBase にマッピングが指定されていません.\r\n"}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Migrations;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var db = new Context();
db.Database.Delete();
db.Database.Create();
db.SaveChanges();
db.Cities.ToList();
}
}
public class Context : DbContext
{
public DbSet<CityBase> Cities { get; set; }
public DbSet<CountryBase> Countries { get; set; }
public DbSet<Area> Areas { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<CountryBase>()
.Property(p => p.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<CityBase>()
.Property(p => p.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<City>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("Cities");
});
modelBuilder.Entity<Country>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("Countries");
});
base.OnModelCreating(modelBuilder);
}
}
public abstract class Entity : IUniqueable
{
[Key]
public virtual int Id { get; set; }
}
public abstract class CityBase :Entity
{
public int CountryId { get; set; }
public string Code { get; set; }
public bool Active { get; set; }
public CountryBase Country { get; set; }
}
public abstract class CountryBase : Entity
{
public string Code { get; set; }
public bool Active { get; set; }
public virtual ICollection<CityBase> Cities { get; set; }
}
public class City : CityBase
{
public int PointX { get; set; }
public int PointY { get; set; }
public virtual ICollection<Area> Areas { get; set; }
}
public class Country : CountryBase
{
public int PointX { get; set; }
public int PointY { get; set; }
}
public class Area:Entity
{
public string Name { get; set; }
public City City { get; set; }
}
public interface IUniqueable
{
int Id { get; set; }
}
}