如何定义DatabaseGenerated.Computed应该计算什么?

时间:2012-07-16 10:56:39

标签: entity-framework-4 ef-code-first entity-framework-4.1 code-first calculated-columns

我正在使用EF CodeFirst执行我的第一步,特别是使用dataAnnotations。 现在我正在尽力理解“DatabaseGenerated”属性。 到目前为止我所知道的:

  • 使用此属性为我提供了三个选项来处理属性值的创建:Computed,Id和None。
  • 使用此属性意味着无法手动更新属性 - 它由数据库
  • 完成

所以 - 我可以想象当使用“Id”选项时会发生什么,我不知道使用“Computed”选项会发生什么。我认为这应该告诉db计算字段值。

例如:字段“ sum ”=字段“价格”+字段“ shipping ”。

但是我怎么能用那种方式呢?我环顾四周,没有找到任何例子。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

您不能使用EF告诉数据库如何计算列 - 您只能告诉EF该列是数据库生成的,因此应该从数据库中检索它以供您在代码中使用。

要控制数据库计算列的方式,您必须在EF之外或数据库初始化逻辑中手动指示它。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    context.Database.ExecuteSqlCommand("RAW SQL HERE");
}

您的SQL(MS T-SQL)可能如下所示(more here):

CREATE TABLE t2 (a int, b int, c int, x float, 
   y AS CASE x 
         WHEN 0 THEN a 
         WHEN 1 THEN b 
         ELSE c 
      END)

对于SQL,这里有一些关于Computed Colums的信息: http://msdn.microsoft.com/en-us/library/ms191250(v=sql.105).aspx

另作参考: http://msdn.microsoft.com/en-us/library/gg193958.aspx