entity-framework-4 - 如何定义 DatabaseGenerated.Computed 应该计算什么?

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

我刚刚开始使用 EF CodeFirst,尤其是 dataAnnotations。 现在我正在尽我所能去理解“DatabaseGenerated”属性。 目前我所知道的:

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

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

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

但是我怎样才能那样使用它呢?我环顾四周,没有找到任何例子。你能帮帮我吗?

最佳答案

您不能使用 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,这里有一些关于计算列的信息: http://msdn.microsoft.com/en-us/library/ms191250(v=sql.105).aspx

另供引用: http://msdn.microsoft.com/en-us/library/gg193958.aspx

关于entity-framework-4 - 如何定义 DatabaseGenerated.Computed 应该计算什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11502862/

相关文章:

c# - EF代码首先不创建数据库

c# - Entity Framework Code First 多对多关系与附加信息

c# - 如何将数组传递给执行存储命令?

asp.net-mvc - MVC/代码优先 : how to add more tables to the same db context?

c# - EF ICollection 与 List 与 IEnumerable 与 IQueryable

entity-framework - 是否可以使用单个 DbContext,并将迁移文件拆分为不同的程序集?

c# - EF 4.1 引用完整性错误

visual-studio-2010 - Entity Framework 生成缺少实体

c# - 如何刷新 DbContext

.net - EntityFramework 4.0 获取复杂类型映射