いくつかの移行の後、継承階層を作成しました。コード ファーストの移行を使用してデータベースを更新すると、コード ファーストは識別子フィールドを自動的に作成しません。それ以来、テーブルを削除して再作成しました (コード ファーストの移行を使用して) 運がありません。私が考えることができる唯一のことは、派生クラスに追加の「非仮想」プロパティがないことです.継承構造は、特定の派生型のみが別のエンティティと関係を持つことができるというビジネスルールを強制するために作成されました.
ベースタイプ:
public abstract class Process
{
private ICollection<ProcessSpecification> _specifications { get; set; }
protected Process()
{
_specifications = new List<ProcessSpecification>();
}
public Int32 Id { get; set; }
public String Description { get; set; }
public Int32 ToolId { get; set; }
public virtual Tool Tool { get; set; }
public virtual ICollection<ProcessSpecification> Specifications
{
get { return _specifications; }
set { _specifications = value; }
}
}
派生クラス (異なる/一意のスカラー プロパティなし):
public class AssemblyProcess : Process
{
private ICollection<AssemblyProcessComponent> _components;
public AssemblyProcess()
{
_components = new List<AssemblyProcessComponent>();
}
public virtual ICollection<AssemblyProcessComponent> Components
{
get { return _components; }
set { _components = value; }
}
}
別の派生型
public class MachiningProcess : Process
{
private ICollection<MachiningProcessFeature> _features;
public MachiningProcess()
{
_features = new List<MachiningProcessFeature>();
}
public virtual ICollection<MachiningProcessFeature> Features { get { return _features; } set { _features = value; } }
}
派生クラス間に違いが見られないため (一意の「非仮想」プロパティがないため)、コードファーストはデータベースに識別子列を追加していませんか? もしそうなら、どうすればこれを回避できますか?そうでない場合、code-first がデータベースに識別子列を自動的に作成しない理由は何ですか? 想定どおりに機能する別の TPH 構造があります。
Dbコンテキスト:
public LineProcessPlanningContext()
: base("LineProcessPlanning")
{
}
public DbSet<Component> Components { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Feature> Features { get; set; }
public DbSet<OperationDefinition> OperationDefinitions { get; set; }
public DbSet<PartDesign> PartDesigns { get; set; }
public DbSet<Process> Processes { get; set; }
public DbSet<ProcessPlan> ProcessPlans { get; set; }
public DbSet<ProcessPlanStep> ProcessPlanSteps { get; set; }
public DbSet<ProductionLine> ProductionLines { get; set; }
public DbSet<StationCycleDefinition> StationCycleDefinitions { get; set; }
public DbSet<StationCycleStep> StationCycleSteps { get; set; }
public DbSet<StationDefinition> StationDefinitions { get; set; }
public DbSet<UnitOfMeasurement> UnitsOfMeasurement { get; set; }
public DbSet<Tool> Tools { get; set; }
また、各派生型に固有の「ダミー」プロパティを作成してみました。コードの移行により、新しいプロパティが列としてテーブルに追加されましたが、移行によって識別子列が作成されませんでした。