Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Vb.net 使用LINQ to SQL和用户定义函数提交更改_Vb.net_Linq_Linq To Sql_Submitchanges - Fatal编程技术网

Vb.net 使用LINQ to SQL和用户定义函数提交更改

Vb.net 使用LINQ to SQL和用户定义函数提交更改,vb.net,linq,linq-to-sql,submitchanges,Vb.net,Linq,Linq To Sql,Submitchanges,在SQL server上,我创建了一个UDF。让我们把它命名为fnCompanyDetails。它从几个联合表中选择有关公司的一些信息。 然后将此函数拖放到VB项目的新.dbml中。我想和LINQ一起使用它。Smth是这样的: Dim company = (From c In d.fnCompanyDetails(sap) Select New With { .Sap = c.txtSAP, .CompanyName1

在SQL server上,我创建了一个UDF。让我们把它命名为fnCompanyDetails。它从几个联合表中选择有关公司的一些信息。 然后将此函数拖放到VB项目的新.dbml中。我想和LINQ一起使用它。Smth是这样的:

Dim company = (From c In d.fnCompanyDetails(sap)

                    Select New With {

        .Sap = c.txtSAP,

        .CompanyName1 = c.txtCompanyName1, _

        .CompanyName2 = c.txtCompanyName2, _

        })
我以表单的形式向用户显示此查询的结果。如果某个字段被更改,我想将更改发送到我的数据库,但是如果我从UDF这样查询,这可能吗?
谢谢你

不,不幸的是,用一种简单的方法是不可能做到的。LINQtoSQL支持读取自定义类型,但只支持通过与表完全对应的实体类型进行更新

通常情况下,最好的方法是始终读取纯实体对象,如果它们是为了更新它们而读取的


另一种解决方案是从udf返回的数据中创建实体对象,然后将这些实体附加到上下文中。如果您先将实体附加到其原始状态,然后在附加后进行更改,则应该不会出现任何更改跟踪问题。

不,不幸的是,无法用简单的方法进行更改。LINQtoSQL支持读取自定义类型,但只支持通过与表完全对应的实体类型进行更新

通常情况下,最好的方法是始终读取纯实体对象,如果它们是为了更新它们而读取的


另一种解决方案是从udf返回的数据中创建实体对象,然后将这些实体附加到上下文中。如果您先将实体附加到其原始状态,然后在附加后进行更改,您应该不会遇到任何更改跟踪问题。

谢谢您,Anders!对于这些实体对象-您的意思是该对象应该重复数据库表的结构,以便能够将更改上载到表中吗?如果我想将所有数据库逻辑(所有UDF、SP、视图等)都放在SQL server上(我的意思是不要在代码中使用LINQ构建它们),使用dataset不是比进入LINQ更好吗?如果将表拖到设计器表面上,实体对象会自动为您创建。LINQtoSQL的目的是(几乎)将所有业务逻辑都放在代码中。如果您使用的是UDF或SPs,那么可能还有其他更好的选项。在这种情况下,我不太理解LINQ的整个概念:(如果我必须选择整个表,那么它可以映射到生成的类,并从中更新和插入。我尝试创建实体对象“tblCompany”从我的UDF返回的结果中,我得到了错误“不允许在查询中显式构造实体类型'tblCompany'。因此这种方法似乎也不起作用:(我想我最好还是继续使用经典的ADO.NET谢谢你,Anders!这些实体对象-你的意思是这个对象应该重复数据库表的结构,以便能够将更改上传到表中吗?如果我想将所有数据库逻辑(所有UDF、SP、视图等)都放在SQL server上(我的意思是不在代码中使用LINQ构建它们)使用dataset不是比使用LINQ更好吗?如果将表拖到设计器表面上,实体对象将自动为您创建。使用LINQ to sql的目的是放置(几乎)代码中的所有业务逻辑。如果您使用UDF或SPs,那么可能还有其他更好的选项。在这种情况下,我不太了解LINQ的整个概念:(如果必须选择整个表,则可以将其映射到生成的类,并从中更新和插入。我试图根据UDF返回的结果创建实体对象“tblCompany”,但出现错误“不允许在查询中显式构造实体类型“tblCompany”因此,这种方法似乎不太管用:(我认为我最好还是继续使用经典的ADO.Net