エンティティクラスの継承関係のためにデータベースがどのように生成されるかに問題があります。サブクラステーブルの主キーIDがスーパークラステーブルのIDを参照するように正しく作成していますが、スーパークラステーブルに不要な外部キーも作成しています。これが私のクラスです:
抽象スーパークラス:
public abstract class DaqObject
{
public int ID { get; set; }
public int AgencyID { get; set; }
public int DaqObjectTypeID { get; set; }
[ForeignKey("AgencyID")]
public virtual Agency Agency { get; set; }
[ForeignKey("DaqObjectTypeID")]
public virtual DaqObjectType DaqObjectType { get; set; }
public virtual Document InheritingDocument { get; set; }
}
対応するデータベーステーブルには、次の列があります。
- ID(PK、int、nullではない)
- AgencyID(FK、int、nullではない)
- DaqObjectTypeID(FK、int、nullではない)
- InheritingWell_ID(FK、int、null)
サブクラス:
public class Document : DaqObject
{
public string Name { get; set; }
}
次の列を持つ対応するデータベーステーブルを使用します。
- ID(PK、FK、int、nullではない)
- 名前(nvarchar(max)、null)
(例として、これらのクラスはスリム化されています。)
データベース内のDaqObjectテーブルは、最終的にInheritingDocument_ID列になります。自分でデータベースを作成し、スーパークラステーブルにその外部キーがなくても関係を作成できます。EFコードに最初に同じことをさせることは可能ですか?