Tag: linq to sql

使用linq-to-sql进行批量插入

我有一个看起来像这样的查询: using (MyDC TheDC = new MyDC()) { foreach (MyObject TheObject in TheListOfMyObjects) { DBTable TheTable = new DBTable(); TheTable.Prop1 = TheObject.Prop1; ….. TheDC.DBTables.InsertOnSubmit(TheTable); } TheDC.SubmitChanges(); } 此查询基本上使用linq-to-sql将列表插入到数据库中。 现在我在网上看到L2S不支持批量操作。 我的查询是通过一次插入每个元素还是一次写入所有元素来工作的? 谢谢你的澄清。

LINQ中的数据冲突

使用SubmitChanges()进行更改时,LINQ有时会因ChangeConflictExceptionexception而导致错误消息Row not found or changed ,而没有任何指示冲突的行或具有冲突的更改的字段,当另一个用户具有冲突时更改了该行中的一些数据。 有没有办法确定哪一行有冲突以及它们出现在哪些字段中,还有一种方法可以让LINQ忽略该问题并简单地提交数据吗? 此外,是否有人知道当行中的任何数据发生更改时,或者仅在LINQ尝试更改的字段中更改了数据时是否发生此exception?

使用XML数据库字段的Linq-to-SQL – 为什么这样做?

一些背景:我有一个数据库,我想使用linq-to-sql通过C#应用程序进行更新。 此表中的一列具有XML数据类型。 该表中的每个其他列(不是XML数据类型)都可以完美地更新,但是当我对XML字段进行更改时,程序(看似)正确执行,但是在我之后字段始终保留其原始值运行SubmitChanges() 。 我浏览了互联网,发现Microsoft Connect上的一些post诊断出类似问题,最后在这里偶然发现了解决方案: 要强制XML字段更新,这不会: XElement tmp = MyLinqObject.XmlField; MyLinqObject.XmlField = null; MyLinqObject.XmlField = tmp; 而不是强迫LINQ更新XML列分配克隆对象: MyLinqObject.XmlField = new XElement (MyLinqObject.XmlField); 我可以确认这似乎确实有效,但我不确定为什么。 我唯一的猜测是XmlField属性在堆上有某种唯一标识符,通过制作克隆,你已经为它分配了一个新的唯一标识符。 当Linq然后生成查询时,它甚至不会尝试查看该字段是否已更新,因为它有一个新的id,它只是将值写入数据库。 但是,我只是在猜测并希望其他人能够更好地了解幕后发生的事情。 编辑 :为了解决Jon的post,问题的原因(正如在MS Connect网站上解释的那样)是“XML字段不会更新,因为Linq-to-SQL不处理XElement.Changed事件”。 对于我的实现,工作的代码最终看起来像这样: MyXElementProperty.SetElementValue(“Author”, author); MyXElementProperty = new XElement(MyXElementProperty); 作为参考(对于发现此问题的任何其他人),以下内容也有效: MyXElementProperty = new XElement(MyXElementProperty); MyXElementProperty.SetElementValue(“Author”, author);

在Linq查询中调用方法

我想在我的表中插入一个名为“S”的列,它将根据从表列获取的值获取一些字符串值。 例如: for each ID (az)我想得到它的字符串值存储在另一个表中。 字符串值从另一个通过Linq查询获取它的方法返回。 是否可以从Linq调用方法? 我应该在同一个查询中做所有事情吗? 这是我需要获得的信息的结构: az是表#1中第一个方块中的ID,从这个ID我得到表#2中的另一个id,从中我可以得到我需要在列’S’下显示的字符串值。 var q = (from a in vA join b in vB on ai equals bj where ak == “aaa” && ah == 0 select new {T = ai, S = someMethod(az).ToString()}) return q; 行S = someMethod(az).ToString()导致以下错误: 无法将类型为“System.Data.Linq.SqlClient.SqlColumn”的对象强制转换为“System.Data.Linq.SqlClient.SqlMethodCall”。

LINQ to SQL – 使用抽象基类时的映射exception

问题:我想在多个程序集之间共享代码。 这个共享代码需要使用LINQ to SQL映射类。 我在这里遇到了同样的问题,但我也找到了一个解决问题的方法(我不会说“bug”)。 可以在此解决方案中下载以下所有代码。 鉴于此表: create table Users ( Id int identity(1,1) not null constraint PK_Users primary key , Name nvarchar(40) not null , Email nvarchar(100) not null ) 和这个DBML映射: 我在一个程序集“Shared”中创建了以下基类: namespace TestLinq2Sql.Shared { public abstract class UserBase { public abstract int Id { get; set; } public abstract string Name { get; […]

使用LINQ to SQL访问系统数据库/表?

现在我有一个每天早上运行的SSIS包,并向我报告前一天失败或成功的包数。 这些包的信息部分包含在SQL Server 2005中 msdb数据库(系统数据库)中的sysjobs表(系统表)中。 当试图将包移动到C#可执行文件(主要是为了获得更好的格式化发送的电子邮件)时,我无法找到一种方法来创建允许我通过LINQ访问这些表的dbml文件。 我试图寻找可以使这些表可见的任何属性,但我没有太多运气。 LINQ to SQL可以实现这一点吗?

没有数据库的unit testing:Linq to SQL

我有一个使用LINQ to SQL实现的存储库。 虽然我没有数据库,但我需要进行unit testing。 如何为FreezeAllAccountsForUser方法编写UT? 你能用手动模拟来展示一个例子吗? 注意:域对象中使用了inheritance映射 注意:unit testing将使用Visual Studio Team Test完成 来自@StuperUser的评论。 unit testing涉及将代码与其交互的其他对象完全隔离。 这意味着如果代码失败,您可以确定失败是与测试中的代码有关。 要做到这一点,你必须伪造这些对象。 码 public void FreezeAllAccountsForUser(int userId) { List bankAccountDTOList = new List(); IEnumerable accounts = AccountRepository.GetAllAccountsForUser(userId); foreach (DBML_Project.BankAccount acc in accounts) { string typeResult = Convert.ToString(acc.GetType()); string baseValue = Convert.ToString(typeof(DBML_Project.BankAccount)); if (String.Equals(typeResult, baseValue)) { throw new Exception(“Not correct […]

LINQ to SQL包含存储过程和用户​​定义的表类型参数

我在SQL Server 2008中使用LINQ to SQL和存储过程。除了一个问题,一切都很好。 L2S无法为用户定义的表类型作为参数生成存储过程的方法。 dbml设计面板中的方法签名使用对象作为参数类型而不是表类型,当我尝试编译时出现错误: Error: DBML1005: Mapping between DbType ‘Structured’ and Type ‘System.Object’ in Parameter ‘ParaName’ of Function ‘dbo.StoredProcName’ is not supported. 有办法解决这个问题吗? 我不想回到传统的ADO.NET数据访问。

LINQ InsertOnSubmit:NullReferenceException

我有这个代码: using DC = MV6DataContext; using MV6; // Business Logic Layer // … public DC.MV6DataContext dc = new DC.MV6DataContext(ConnectionString); IP ip = new IP(Request.UserHostAddress); dc.IPs.InsertOnSubmit(ip); dc.SubmitChanges(); // in Business Logic layer: public class IP : DC.IP { public IP(string address) { … } } 在尝试InsertOnSubmit(ip)时,我得到一个NullReferenceException(对象引用未设置为对象的实例)。 dc不为空; ip和ip的所有属性都不为null; 虽然有些是空的。 VS2008不会让我进入InsertOnSubmit,因此在评估时我无法知道具体为null。 是什么赋予了? 注意:我已经检查过,并且由FK关系创建的所有Linq.EntitySets都存在且非空。

关于UNION,INTERSECT和EXCEPT的SqlException

有人可以帮我解决这个例外吗? 我不明白它意味着什么或如何解决它…这是一个SqlException,带有以下消息: 使用UNION,INTERSECT或EXCEPT运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。 我在伪代码中运行查询时得到它,如下所示: // Some filtering of data var query = data.Subjects .Where(has value) .Where(has other value among some set of values); // More filtering, where I need to have two different options var a = query .Where(some foreign key is null); var b = query .Where(some foreign key is not null) .Where(and that […]