Entity framework 4 如何定义生成的.计算的数据库应该计算什么?

Entity framework 4 如何定义生成的.计算的数据库应该计算什么?,entity-framework-4,ef-code-first,entity-framework-4.1,code-first,calculated-columns,Entity Framework 4,Ef Code First,Entity Framework 4.1,Code First,Calculated Columns,我只是用EF CodeFirst做了我的第一步,特别是用DataAnnotation。 现在我正在尽力理解“DatabaseGenerated”属性。 到目前为止我所知道的: 使用此属性可以提供三个选项来处理属性值的创建:Computed、Id和None 使用此属性意味着不能手动更新属性-这是由数据库完成的 所以-我可以想象当使用“Id”选项时会发生什么,我不知道当使用“Computed”选项时会发生什么。我认为这应该告诉db计算字段值 例如:字段“总和”=字段“价格”+字段“装运” 但是我

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

  • 使用此属性可以提供三个选项来处理属性值的创建:Computed、Id和None
  • 使用此属性意味着不能手动更新属性-这是由数据库完成的
所以-我可以想象当使用“Id”选项时会发生什么,我不知道当使用“Computed”选项时会发生什么。我认为这应该告诉db计算字段值

例如:字段“总和”=字段“价格”+字段“装运”


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

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

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    context.Database.ExecuteSqlCommand("RAW SQL HERE");
}
您的SQL(MS T-SQL)可能如下所示():

对于SQL,以下是有关计算列的一些信息:

也可供参考:

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)