实体框架6映射或计算列中的Code First VarBinary Length

时间:2015-12-14 22:23:07

标签: sql-server entity-framework entity-framework-6 code-first ef-fluent-api

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

Entity framework and VARBINARY

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

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

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

    public string Filename { get; set; }

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

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

我可以在SQL中配置它:

SQL Computed Length Field

当我插入表格时,它给了我正确的尺寸。

但是,如果我使用VS2015生成我的数据模型/ DbContext - >添加新项目... - > ADO.NET实体数据模型,我的FileData POCO只在FileSize属性上有一个带有DatabaseGenerated(DatabaseGeneratedOption.Computed)的注释。没有别的东西反映我添加的len(内容)公式。

是否可以使用EF6 Code First配置此类计算列?

1 个答案:

答案 0 :(得分:2)

您无法首先在实体框架代码中创建计算列。您执行此操作的方式是正确的,您只需将DatabaseGenerated(DatabaseGeneratedOption.Computed)属性放在属性上,Entity Framework不会尝试为您创建列,然后创建列手动。一个好主意是将属性设置为私有,因为您不需要手动修改它:

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