Добавить настраиваемое поле в linq to sql автоматически сгенерированный объект - PullRequest
3 голосов
/ 23 марта 2010

У меня есть таблица со столбцом varbinary(max) для изображения. Я удалил таблицу в конструкторе LinqToSql и установил для параметра «Задержка загрузки» значение true, поскольку я не хочу загружать фактические данные изображения. Можно ли просто узнать, является ли столбец нулевым или нет, не получая фактические данные и все еще выполняя только один запрос из базы данных? Я также хотел бы использовать автоматизированный объект, созданный Linq. Что-то вроде нового свойства bool HasImage {get;} будет именно тем, что я ищу.

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

Создать частичный класс

public partial class MyTableObject
{
    public bool HasImage { get { return MyColumn.HasValue; } }
}

это, вероятно, вызовет попадание в базу данных, хотя

Я бы предложил добавить новый столбец в бит "HasImage" базы данных, который вы устанавливаете при загрузке или удалении изображения

3 голосов
/ 23 марта 2010

Единственный способ для Linq to SQL «автоматически» узнать, имеет ли столбец значение, - это фактически запросить его у базы данных. Вы можете расширить частичный класс с помощью полей / свойств, но это не устранит поиск.

Одна из вещей, которую вы могли бы сделать, - это создать вычисляемый столбец (при условии, что здесь SQL 2005+, в противном случае вам придется попытаться адаптировать его к вашей СУБД). Если ваша таблица выглядит так, например:

CREATE TABLE Foo
(
    FooID int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
    FooName varchar(50) NOT NULL,
    FooImage varbinary(max) NULL
)

Вы бы добавили вычисляемый столбец следующим образом:

ALTER TABLE Foo
ADD FooHasImage AS CASE
    WHEN FooImage IS NULL THEN 0
    ELSE 1
END

Затем вы можете добавить столбец FooHasImage к вашей сущности Linq to SQL, не задерживать его загрузку и проверить это свойство вместо явной проверки свойства FooImage.

Кроме того, я чувствую себя обязанным указать, что хранение изображений в базе данных таким образом является неоптимальным. Это может быть необходимо, я не знаю много о вашей среде, но если вы используете SQL Server 2008, тогда рассмотрите возможность использования FILESTREAM вместо этого, так как он будет использовать файловую систему для дешевого "автономного" хранения больших двоичных объектов вместо заполнения все это в базе данных.

0 голосов
/ 23 марта 2010

не знаю фактического ответа на ваш вопрос, но в случае, если вы не получите ответ: как насчет того, чтобы внести изменения самостоятельно в БД. (это, конечно, если у вас есть контроль над дизайном БД).

и поместите столбец HasImage (или HasContent) прямо в таблицу со значением по умолчанию «false», а когда вы добавляете изображение, вы делаете его «истинным», а затем вы можете обратиться к этому столбцу, чтобы увидеть, есть ли у вас изображение или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...