Entity Framework Code First - Значения по умолчанию для необнуляемых типов - PullRequest
0 голосов
/ 30 октября 2011

Я пытаюсь сопоставить устаревшую базу данных с устаревшей моделью POCO. Поскольку база данных и модель разрабатываются без учета Entity Framework, между ними возникли небольшие различия.

Проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы, чтобы она работала как можно менее инвазивно (не хочу касаться кода базы данных или модели), поскольку существует слишком много кодов, от которых зависит.

Я попытался отобразить сущности, используя подход «сначала код», повторно используя POCO из устаревшей модели. Казалось, что все работает, как найти, так как я обнаружил, что некоторые числовые столбцы, которые могут иметь значение NULL, были сопоставлены со свойствами, которые объявлены как примитив Int32 (не может иметь значение NULL).

Например, допустим, у меня есть таблица:

CREATE TABLE [dbo].[SomeTable](
    [Id] [int] NOT NULL,
    [Descrip] [nvarchar](50) NULL,
    [SomeNumericCol] [int] NULL,
 CONSTRAINT [PK_SomeTable] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)) ON [PRIMARY]

и соответствующий POCO:

public class SomeTable
{
    public Int32 Id { get; set; }
    public string Descrip { get; set; }
    public Int32 SomeNullableCol { get; set; }
}

Как вы можете видеть, существует разница между столбцом SomeNullableCol и соответствующим свойством, поскольку типом последнего является примитив int, который не допускает нулевые значения.

Есть ли способ заставить это отображение работать без необходимости менять тип SomeNullableCol на обнуляемый тип int (я имею в виду Int32?) И, если возможно, не касаться кода класса.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Да, просто замаскируйте это аннотациями данных.Создайте nullable int и замаскируйте его под именем столбца, затем создайте несопоставленное свойство с тем же именем, которое возвращает значение int только из nullable столбца.

1 голос
/ 30 октября 2011

Можете ли вы сделать собственность на вашем POCO обнуляемой?

...