Vb.net 使用LINQ to SQL和用户定义函数提交更改
在SQL server上,我创建了一个UDF。让我们把它命名为fnCompanyDetails。它从几个联合表中选择有关公司的一些信息。 然后将此函数拖放到VB项目的新.dbml中。我想和LINQ一起使用它。Smth是这样的: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
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