Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server计算列在EntityFramework中如何工作?_C#_.net_Sql Server 2008_Entity Framework - Fatal编程技术网

C# SQL Server计算列在EntityFramework中如何工作?

C# SQL Server计算列在EntityFramework中如何工作?,c#,.net,sql-server-2008,entity-framework,C#,.net,Sql Server 2008,Entity Framework,我有一个表,其列TotalAmount是从列Amount+Extra计算出来的列,那么如果我在这个表上使用实体框架,这个计算是如何工作的呢 谢谢。计算列要么(A)在每次访问时重新计算,要么(b)如果使用persistend关键字定义,则会在表的数据页中创建一个实际列,并将值存储在其中 无论如何,对于实体框架来说,这两种计算列的行为应该与常规列一样。如果实体框架访问该表并从中读取数据,它应该获取当前值TotalAmount,并将其存储在实体的相应属性中 从数据库创建ADO.NET实体数据模型时,E

我有一个表,其列
TotalAmount
是从列
Amount+Extra
计算出来的列,那么如果我在这个表上使用实体框架,这个计算是如何工作的呢


谢谢。

计算列要么(A)在每次访问时重新计算,要么(b)如果使用
persistend
关键字定义,则会在表的数据页中创建一个实际列,并将值存储在其中

无论如何,对于实体框架来说,这两种计算列的行为应该与常规列一样。如果实体框架访问该表并从中读取数据,它应该获取当前值
TotalAmount
,并将其存储在实体的相应属性中

从数据库创建ADO.NET实体数据模型时,EF将检测到该列是计算列,因此无法为该属性设置新值(显然):


除marc_的回复外,重要的是要注意,更改EF实体的基本属性不会重新计算值,除非保存对象,然后从数据库中刷新它。换句话说,C#对象上的属性没有实现来自数据库的计算。

它是否没有给您预期的结果?根据您的屏幕截图,似乎将为计算列定义一个setter。我假设它可以让您在代码中设置,在与数据库交互时忽略它,或者抛出错误?@Gromer:实际上,您可以将计算列的值设置为C#对象的最大值,但该值不会存储在数据库表中。调用
.SaveChanges()
时,计算列的值不会发送到数据库-这没有意义。设置另一列的值,从而计算数据库表中的计算列。是的,忽略它对我来说最有意义。我以前没有在EF中使用计算列,我只是好奇如果您设置了它,它是否会抛出异常。谢谢你的信息!我想我们应该庆幸它做了这么多,但它产生了一个二传手,这似乎非常奇怪。。。