c# - DataContext.CreateDatabase 正在创建具有随机顺序列的数据库

标签 c# linq sql-server-express datacontext

我有一个 c#.Net 桌面应用程序,我在其中使用 Linq 作为 ORM,使用 SQL Server Express 作为我的数据库。因此,当我使用 dataContext.CreateDatabase() 方法时,90% 的时间它会按照与 linq.cs 中相同的顺序创建列。在剩下的 10% 中,几列的顺序是困惑的。 (提到的百分比是近似值。Linq.cs 是从 SqlMetal 生成的)

发生这种情况是否有特定原因,或者是否有一些控制它的设置......? 我想到了使用顺序,因为数字列大约是 30。而且有 15 到 20 个这样的表。

更新

我们以混合方式使用数据库(即也直接执行 SQL 命令)。这就是我寻找列顺序的原因之一。

最佳答案

在其内部,LINQ-to-SQL 使用 SQL 语言。当它创建表时,如果您登录 SQL Server,您将看到 SQL 语句,例如 ALTER TABLE ADD COLUMN...

ADD COLUMN 不允许设置列位置。更一般地说,SQL(语言,无论是 Oracle、MySQL 还是 SQLServer)不提供控制列位置的工具,因此列的顺序仅取决于它们的创建顺序。

此行为是有意的。你永远不应该依赖列顺序。大多数数据访问框架明确反对它,并且它们不保证您在任何时候拥有的列顺序的稳定性。

此外,在您的情况下,您使用的是 LINQ-to-SQL,因此除非您打算以混合方式使用它(即也直接执行 SQL 命令),否则顺序无关紧要,因为您将访问列通过相应的命名属性。

因此,如果您确实以混合方式使用它,请确保在执行 SqlCommands 时始终指定列名。不要写 INSERT INTO MYTABLE VALUES (1,2,3),而是写 INSERT INTO MYTABLE(COL1, COL2, COL3) VALUES (1,2,3)

另外,我不太明白你为什么说要使用顺序,因为有 30 列。第一,30个不高(20张表也不行),第二,如果能按位置调用(如ADDRESS1、ADDRESS2、ADDRESS3)一般说明数据库设计有问题。参见 1st normal form .

关于c# - DataContext.CreateDatabase 正在创建具有随机顺序列的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7147960/

相关文章:

c# - 运算符 '==' 与使用 DynamicExpression.ParseLambda<T, bool> 的操作数类型 'Guid' 和 'Guid' 不兼容

c# - 如何使用 json.net 构建用于序列化的对象层次结构?

c# - slider 大小变化

c# - 在 C# 中使用 IFilter 并从数据库而不是文件系统中检索文件

c# - 当多个实例运行时,使用ASP.NET重置密码时无效的 token

c# - Linq比较可为空的字符串到字符串

java - jdbc - sql server 在控制台中未显示任何输出/错误

sql-server - 无法在 Visual Studio 2010 中创建表,出现 'The specified module could not be found (exception from Hresult: 0x800700E)' 错误

sql - 如何使用 sql server 执行 BEFORE UPDATED 触发器?

c# - 如何锁定多个对象?