2

我的 MS SQL 2014 数据库表有一个使用数据库函数的计算属性列。使用 SQL Server Management Studio,针对表的查询会按预期列出计算的属性值。

通过导入向导创建的 Codefluent 模型显示具有计算列作为属性的实体。底层 .cpf 文件使用“d3p1:compute=”定义属性以及数据库函数使用的参数列表。

当加载一个实体或实体集合时,计算属性中使用的属性具有值,但计算属性的值是空/空。

如何让 Codefluent 从数据库表中读取计算值并将该值包含在实体的属性中?

4

2 回答 2

1

这有点棘手。首先,您应该像任何其他属性一样声明该属性。然后您必须指示 SQL 生成器在该列上声明一个公式。您可以使用computeSQL 生产者命名空间中的自定义 ' ' 属性来做到这一点。您可以使用 Visual Studio 建模器进行设置,如下所示:

在此处输入图像描述

在这个例子中,我创建了一个int属性,它只是另一个列值乘以 2。

或者,您可以将属性声明为“保存时读取”,因为大多数情况下,您希望在保存后读取计算值,而不仅仅是在加载操作时:

在此处输入图像描述

全部完成后,此示例控制台应用程序应显示 30:

class Program
{
    static void Main(string[] args)
    {
        var c = new Customer();
        c.Name = "killroy";
        c.Age = 15;
        c.Save();
        Console.WriteLine(c.Age2); // will display 30
    }
}
于 2016-09-06T06:55:59.647 回答
1

如果 Simon Mouriers 解决方案解决了您的问题,那么这可能是最好的方法。但是,还有其他 2 个选项

  1. RAW 查看方式

创建 Codefluent 实体视图后,单击“编辑位置”按钮,它将允许您创建 RAW 视图

在此处输入图像描述

您可以指定高级属性“UsedForMethods”。

警告:相关实体将使用表而不是视图。这是设计使然,知识中心的某处有一篇关于如何绕过它的文章。http://www.softfluent.com/product/codefluent-entities/knowledge-center/

在此处输入图像描述

  1. 重命名 SQL 表并创建与原始表同名的 SQL 视图- 这种方法是一种 hack,Softfluent 不鼓励这种方法,我喜欢它,因为我确切地知道幕后发生了什么。我在需要软删除的场景中成功使用了它。我已经使用 2 个处理重命名的存储过程自动化了这个过程。使用这种方法需要在构建模型之前运行一个存储过程来撤消名称更改。另一个存储过程在构建模型后处理重命名。我将在几天内发布存储过程以及我如何使用它们。
于 2016-09-06T13:27:36.203 回答