Entity Framework 4.3.1 Table Per Type Code First создает другую схему в SQL Server Express 2008 и SQL Server 2008R2.

Я использую 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, и это отлично генерирует таблицы, то есть таблицу ReplacementRentalDongles со столбцом ReplacementCharged_Id, который ссылается на таблицу Money.

Однако, когда я запускаю тот же код, но с использованием экземпляра SQL Server 2008R2 Developer, сгенерированные таблицы отличаются! В этом случае столбец ReplacementCharged_Id в конечном итоге создается в «базовой» таблице BaseConstraint.

Является ли это ошибкой в ​​EF 4.3.1, поскольку другая версия SQL Server приводит к созданию другой схемы? Совместим ли EF с SQL 2008R2?




Ответы (1)


Просто чтобы вы все знали, что мне удалось решить проблему, просто обновившись до Entity Framework 5.0 (выпущена всего две недели назад — 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, и, по сути, он также представляет собой набор исправлений ошибок для EF 4.3.1 при работе на .NET 4.

Короткая версия — обновлены библиотеки EF до версии 5.0 (через NuGet), и такая же (правильная!) схема теперь генерируется для новых баз данных на SQL 2008 Express И 2008R2, все отлично работает!

Одно небольшое предостережение: мне пришлось обновить исходный код дополнительными директивами using, так как атрибуты [Table], [InverseProperty] и т. д. были перемещены в пространство имен System.ComponentModel.DataAnnotations.Schema (в EF 4.3.1 они находились в пространстве имен System.ComponentModel.DataAnnotations).

Простое решение - просто обновите!

person yorkshirespud    schedule 28.08.2012