1

私は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 と互換性がありますか?

4

1 に答える 1

0

Entity Framework 5.0 (わずか 2 週間前にリリース - http://blogs.msdn.com/b/adonet/archive/2012/08/15/ ) にアップグレードするだけで、問題を解決できたことをお知らせします。ef5-released.aspx )

EF 5.0 には、.NET 4.5 で実行している場合に利用できる新機能が実装されています (.NET 4.0 ではありません)。ただし、EF 5 は .NET 4 でも実行されます。.NET 4 で実行すると、EF 4.3.1 のバグ修正のロールアップのようにも見えます。

ショート バージョン - EF DLL を (NuGet 経由で) 5.0 にアップグレードし、SQL 2008 Express および 2008R2 上の新しいデータベースに対して同じ (正しい!) スキーマが生成されるようになりました。

1 つの小さな警告 -などの属性が名前空間に移動されたため、ソースを追加のディレクティブで更新する必要がありました ( EF using4.3.1では名前空間にありました)。[Table][InverseProperty]System.ComponentModel.DataAnnotations.SchemaSystem.ComponentModel.DataAnnotations

シンプルなソリューション - アップグレードするだけです!

于 2012-08-28T09:22:24.767 に答える