私はEF CodeFirstを使用して、TPTテーブルを含む非常に大きなスキーマを生成しています。
[Table("MissingReplacementDongles")]
public class MissingReplacementDongle : ReplacementRentalDongle
{
public virtual bool OriginalStolen { get; set; }
}
public abstract class ReplacementRentalDongle : ConsequentialRentalDongle
{
public virtual Money ReplacementCharged { get; set; }
}
[Table("ConsequentialRentalDongles")]
public abstract class ConsequentialRentalDongle : RentalDongle
{
}
[Table("RentalDongles")]
public abstract class RentalDongle : BaseConstraint
{
public virtual DateTime CurrentExpirationDate { get; set; }
public virtual DateTime? ReturnedDate { get; set; }
}
私は SQL Server Express 2008 のインストールに対して開発を行ってきましたが、これによりテーブルが完全に生成されます。つまり、Money テーブルを参照する ReplacementCharged_Id 列を持つ ReplacementRentalDongles テーブルが生成されます。
ただし、SQL Server 2008R2 Developer インスタンスを使用して同じコードを実行すると、生成されるテーブルが異なります。この場合、ReplacementCharged_Id 列は最終的に「ベース」テーブル BaseConstraint に生成されます。
これは EF 4.3.1 のバグですか? SQL Server のバージョンが異なると、最終的に別のスキーマが作成されますか? EF は SQL 2008R2 と互換性がありますか?