Tag: linq to sql

如何插入具有自动增量编号作为主键的新记录?

例如,我有以下表格: 顾客信息 cus_id: auto increment, int, is Identity cus_name: nvarchar 如果我使用以下代码插入记录“彼得”, string name = “Peter”; DataContext DC = new DataContext(); CustomerInfo newCustomer = new CustomerInfo(); newCustomer.cus_name = name; DC.CustomerInfos.InsertOnSubmit(newCustomer); DC.SubmitChanges(); 以下错误返回, 无法对“Table(CustomerInfo)”执行“创建”,“更新”或“删除”操作,因为它没有主键。 我是否需要自定义cus_id或任何其他解决方案? 谢谢!

在具有多个记录的Linq查询之后,foreach循环仅返回第一条记录

我有一个针对第三方提供的数据库运行的Linq2SQL查询。 查询的主要部分如下所示: var valuationQuery = from v in context.Valuations where v.ModelId == QualifiedModelId.ModelId && v.QualifyModelId == QualifiedModelId.Qualifier && v.LanguageCode == QualifiedModelId.LanguageCode && v.Edition == Data.Meta.Edition.CurrentEdition.Date && v.RegDate == yearReg.RegistrationDate && v.ValTypeDescription == “Normal” && v.MileageBandID == MileageBand 当我用foreach循环环绕它时,它会工作或失败,具体取决于最后的选择。 当select指定所有这样的字段时…… select new { v.Value1, v.Value2, v.Value3, … snip … v.Value14, v.Value15, v.ValueTypeID }; ……它正常工作。 当我执行以下操作时,循环会迭代正确的次数,但每次都会返回第一条记录: select […]

从C#中的存储过程中捕获错误

我有一个存储过程,用于在登录期间validation用户。 如果成功则返回用户实体,这样做效果很好! 我的问题是,如果它不起作用,我会在SP中引发错误,如何捕获此错误并以最佳方式使用它? 现在我得到nullrefference,这是代码:存储过程: ALTER PROCEDURE getEmployee ( @username nvarchar(50), @password nvarchar(50) ) AS DECLARE @Error_MSG nvarchar(50) BEGIN IF EXISTS (select * from Employee where eUsername = @username AND pword = @password) begin select * from Employee where eUsername = @username AND pword = @password END ELSE BEGIN SET @Error_MSG = ‘Wrong password, or user […]

LINQ to SQL事务和读取记录的ID

任何人都可以解释我如何在Linq中插入带有事务的数据库并读取该记录的id?

System.Collections.Generic.KeyNotFoundException:给定的键不在字典中

我在对方法执行unit testing时收到上述错误消息。 我知道问题出在哪里,我只是不知道为什么它不在字典中。 这是字典: var nmDict = xelem.Descendants(plantNS + “Month”).ToDictionary( k => new Tuple(int.Parse(k.Ancestors(plantNS + “Year”).First().Attribute(“Year”).Value), Int32.Parse(k.Attribute(“Month1”).Value), k.Ancestors(plantNS + “Report”).First().Attribute(“Location”).Value.ToString()), v => { var detail = v.Descendants(plantNS + “Details”).First(); return new HoursContainer { BaseHours = detail.Attribute(“BaseHours”).Value, OvertimeHours = detail.Attribute(“OvertimeHours”).Value, TotalHours = float.Parse(detail.Attribute(“BaseHours”).Value) + float.Parse(detail.Attribute(“OvertimeHours”).Value) }; }); var mergedDict = new Dictionary<Tuple, HoursContainer>(); foreach (var item […]

OrderBy的正确行为

我遇到了令我困惑的事情,我希望看到你对此事的看法。 事实certificate,linq对sql和entity framework的威胁是连续的顺序。 以下代码仅用于示例,我并未声称它有任何意义: Linq to sql: DataClasses1DataContext db = new DataClasses1DataContext(); var result = (from c in db.Products orderby c.ProductName orderby c.UnitPrice orderby c.UnitsOnOrder select c).ToList(); 它在服务器端产生的是什么: SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] FROM [dbo].[Products] AS [t0] ORDER BY [t0].[UnitsOnOrder], [t0].[UnitPrice], [t0].[ProductName] 与Entity Framework进行的相同测试会生成以下内容: SELECT [Extent1].[ProductID] AS [ProductID], [Extent1].[ProductName] […]

LINQ to SQL复杂连接具有混合条件

我有一个SQL语句,我试图转换为LINQ to SQL,我已经设法将其中的大部分转换,但我遇到了一个我无法在LINQ中解决的声明。 导致头痛的SQL查询部分是: SELECT * FROM step INNER JOIN action on (step.NextAction = action.ID and step.ActionStatus != 4) or (step.ACTION = action.ID and step.ActionStatus = 4) step是包含一系列操作的表, action是可用action的列表。 ActionStatus是状态列表的索引 – 4 ==’失败’。 基本上,对于非失败的操作,它需要返回下一个操作。 如果操作失败,则返回当前操作。 这只是其中一个连接(在完整查询中总共有10个表),其中大多数是直接的equijoins,有些是在多个条件下,但我已经能够在LINQ中编写它们而没有任何问题。 不过这个,我看不出它会怎么写。 我看到了这个答案,但也看不出如何在这种情况下应用它。 有任何想法吗?

如何在Linq to Sql中插入或更新where子句?

我试图将以下存储过程转换为LinqToSql调用(这是SQL的简化版本): INSERT INTO [MyTable] ([Name], [Value]) SELECT @name, @value WHERE NOT EXISTS(SELECT [Value] FROM [MyTable] WHERE [Value] = @value) DB对要检查的字段没有约束,因此在这种特定情况下,需要手动进行检查。 此外,还有许多项目不断被插入,所以我需要确保当这个特定的插入发生时,没有值字段的欺骗。 我的第一个预感是做以下事情: using (TransactionScope scope = new TransactionScope()) { if (Context.MyTables.SingleOrDefault(t => t.Value == in.Value) != null) { MyLinqModels.MyTable t = new MyLinqModels.MyTable() { Name = in.Name, Value = in.Value }; // Do some stuff […]

Rhino Mocks – 测试存储库层返回“对象引用未设置为实例”错误

谨慎的是,我首先说我是犀牛模拟的新手,而且更普遍地嘲笑。 考虑到这一点,我正在尝试对我的Linq to SQL存储库层进行unit testing,以确保正在命中datacontext上的正确方法,并确保LINQ to SQL正确过滤。 〜为了清晰起见〜 有问题的方法 – ‘GetRecordWhere’ – 在Repository类中定义。 它在DataContextWrapper上调用方法 – ‘GetTable’ – 它是我的Linq to SQL DataContext(自动生成)的自定义包装器,它被实现以使DataContext可模拟。 public interface IDataContextWrapper : IDisposable { IQueryable GetTable() where TName : class; } public class DataContextWrapper : IDataContextWrapper { public IQueryable GetTable() where TName : class { return _db.GetTable().AsQueryable(); } } public class Repository […]

使用Linq-to-Sql表达式生成SQL子句

我想创建一个可以使用Expression并使用Linq-To-Sql生成所需SQL语句的存储库模型。 例如,我有一个这样的function: // Possible criteria Expression<Func> criteria1 = p => p.Price > 1000; // Function that should take that criteria and convert to SQL statement static IEnumerable GetCustomers (Expression<Func> criteria) { // … } 在函数内部,我想使用Linq-To-Sql将条件转换为SQL语句。 我知道你可以使用DataContext.Log来查看执行的查询和DataContext.GetCommand(query).CommandText以便在执行之前查看完整的查询。 但是,我想只生成整个表达式的一部分。 我希望完成的是使我的存储库抽象出底层技术(Linq-to-Sql,Dapper等)。 这样我就可以将Expression传递给存储库,让它生成正确的语句并使用正确的技术来执行它。