我有一个表,其中包含用于图像的 varbinary(max)
列。我已将表格放在 LinqToSql 设计器上并将“延迟加载”设置为 true,因为我不想加载实际图像数据。
是否可以只知道该列是否为空,而无需获取实际数据并且仍然只从数据库中执行一个查询?
我还想使用 Linq 创建的自动化实体。
像新的 bool HasImage {get;}
属性之类的东西正是我正在寻找的东西。
最佳答案
Linq to SQL“自动”知道该列是否有值的唯一方法是实际向数据库询问它。您可以使用字段/属性扩展部分类,但这不会消除查找。
您可以做的一件事是创建一个计算列(这里假设使用 SQL 2005+,否则您将不得不尝试使其适应您的 DBMS)。例如,如果您的表格看起来像这样:
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
,因为它将使用文件系统来获取便宜的“离线”BLOB存储而不是将整个内容塞入数据库。
关于c# - 将自定义字段添加到 linq to sql 自动生成的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501642/