c# - 将自定义字段添加到 linq to sql 自动生成的实体

标签 c# linq-to-sql

我有一个表,其中包含用于图像的 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/

相关文章:

c# - 如何为 DataRepeater 链接标签设置唯一 ID

LINQ 选择行 "max"版本

c# - 这是LINQ-to-SQL的示例吗?

c# - 在递归方法中使用 LinqToSql 对性能非常不利

c# - 是否可以包装整数并像整数一样调用它?

c# - 每当对表单内的文本框、组合框等进行任何更改时都会触发事件

c# - 林奇 : saving files to a database

c# - LINQ:结合加入和分组依据

c# - WPF C# - MainWindows.g.cs 中的 "Unable to find namespace"错误

c# - 在 C# 中有效地从二维数组中提取向量