【问题标题】:Entity Framework Code First: How to map SQL Server's computed columns into CF model?实体框架代码优先:如何将 SQL Server 的计算列映射到 CF 模型?
【发布时间】:2012-02-13 00:31:02
【问题描述】:

是否可以将计算列映射到 Code First 模型? 我想用 SQL Server 定义计算列,然后将它们映射为我的 CF 模型中的属性。

提前致谢

最好的问候

【问题讨论】:

    标签: sql-server entity-framework data-binding ef-code-first calculated-columns


    【解决方案1】:

    使用DatabaseGenerated 属性和DatabaseGeneratedOption.Computed 作为值

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public string Foo { get; set; }
    

    【讨论】:

    • 非常感谢@Eranga!我也找到了this answer,@Goran Obradovic 先生也指定使用DELETE FROM [dbo].[EdmMetadata]。我还是没能测试这些程序,你告诉我你是否也要删除edmmetadata?谢谢!
    • 我成功地使用 `[DatabaseGenerated(DatabaseGeneratedOption.Computed)]' 属性使其工作,正如 Eranga 所建议的那样并在创建新的计算列之前删除列解决方案的第一个 Data Init (DataFeed)。 THX @Eranga!
    【解决方案2】:

    不确定如何在不使用视图的情况下处理计算列,而您 cannot use views in EF Code First (you can in Model & DB first though)。 EF 将在 SQL 中为您执行一些操作,而不是在代码中,但这听起来不像您正在寻找的那样。你能详细说明你想要达到的目标吗?

    【讨论】:

    • 谢谢@RyanR。例如,我正在尝试使用 DataObject 访问计算列。如果我将所有字段“连接”到 dbset,我将不会遇到我在my question 中描述的“纯实体”问题。按照@Oleg 的建议,我认为最好的方法是将计算的属性直接放在我的数据库中。现在看来是正确的方向,将这些注释放在属性中:[NotMapped] [DatabaseGenerated(DatabaseGeneratedOption.Computed)]...
    • 不正确,您可以在 EF Code First 中使用和建模视图。你不能让它们自己生成,你必须以另一种方式创建它们,没有 Code First DatabaseGeneration 的东西。
    • @ScottStafford 我想看看这项工作 - 你有示例或任何可以链接到的文档吗?
    【解决方案3】:

    我认为对于 EFCF 初学者(像我一样!),没有必要创建 Database Initializers,这样就可以了:

    Model1 model = new Model1();//Model1 : DbContext
    model.Database.CreateIfNotExists();
    model.Database.ExecuteSqlCommand("alter table Results drop column Total; alter table Results add Total AS (Arabic + English + Math + Science)");
    

    查看完整答案here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多