0
私が必要なときに自動的に監査証跡テーブルを追加する機能を作ろうとしています。 それは動作しますが、唯一の問題は、監査テーブルが指定したプライマリキーを取得せず、プライマリキーとして以前に指定されたItemIdを保持しているということです。EFコード - 最初の継承と主キーの問題
私はADepartmentのDepartmentを継承しており、最初のEntityTypeConfigurationで主キーを指定しているからです。私はEFがそれを実現するほどスマートだと思うが、それは私が望むものではない。
2番目のEntityTypeConfigurationに、主キーとしてItemIdの使用を停止し、そのためにAuditIdを使用する必要があることを伝える方法はありますか?
public class Item
{
public int ItemId { get; set;}
}
public class Department : Item
{
public string Name { get; set; }
}
public class ADepartment : Department, IAudit
{
public int AuditId { get; set; }
}
EntityTypeConfiguration<Department> cfg = new EntityTypeConfiguration<Department>();
cfg.HasKey(p => p.ItemId);
cfg.Map(p => p.MapInheritedProperties());
cfg.ToTable(string.Format("Entity{0}", typeof(Department).Name));
model.Configurations.Add<Department>(cfg);
EntityTypeConfiguration<ADepartment> c = new EntityTypeConfiguration<ADepartment>();
c.HasKey(p => p.AuditId);
c.Map(p => p.MapInheritedProperties());
c.ToTable(string.Format("Audit{0}", typeof(ADepartment).Name));
model.Configurations.Add<ADepartment>(c);
おかげで、明示的なロードを使用することを除いてこれを回避する方法はありません。私は両方のタイプが私が監査テーブルで必要なフィールドを実装する必要があるインターフェイスを使用することに決めました。 – Jeroen