Entity Framework 6 Code First VarBinary 映射或计算列中的长度

Entity Framework 6 Code First VarBinary Length in mapping or computed column

我发现可以使用查询来查找查询中 varbinary 字段的长度。

Entity framework and VARBINARY

但是您可以在 Fluent API 中映射 FileSize 属性 来获取 varbinary 的大小而无需编写查询吗?

我希望能够在SQL 服务器中存储一些文件信息。此数据是文件名、文件内容。这在数据模型中有如下定义:

public class FileData
{
    public int Id { get; set; }

    public string Filename { get; set; }

    public byte[] Contents { get; set; }
}

通常,我想在检索 FileData 时知道内容的大小。如果我将一个 int 属性 FileSize 添加到 FileData,你可以映射这个 属性 来计算大小吗?

我可以在 SQL 中配置它:

当我插入 table 时,它给出了正确的尺寸。

但是,如果我使用 VS2015 生成我的数据 model/DbContext -> 添加新项... -> ADO.NET 实体数据模型,我的 FileData POCO 只有带有 DatabaseGenerated(DatabaseGeneratedOption.Computed) 在 FileSize 属性 上。没有其他反映我添加的 len(Contents) 公式。

是否可以使用 EF6 Code First 配置这种计算列?

您不能先在 entity framework 代码中创建计算列。你这样做的方式是正确的,你只是把 DatabaseGenerated(DatabaseGeneratedOption.Computed) 属性放在 属性 上,Entity Framework 不会尝试为你创建列,你创建列手动。一个好主意是将 属性 设置为私有集,因为您永远不需要手动修改它:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int? FileSize {get; private set;}