DataContext.CreateDatabase正在创建列按随机顺序排列的数据库

本文关键字:顺序 随机 排列 数据库 CreateDatabase 创建 DataContext | 更新日期: 2023-09-27 18:06:24

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

是否有一个特定的原因,为什么它发生或有一些设置来控制…?我想到了使用顺序,因为数字列大约是30。一共有15到20张这样的桌子。

我们以混合方式使用数据库(即:,也可以直接执行SQL命令)。

DataContext.CreateDatabase正在创建列按随机顺序排列的数据库

在其内部,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),通常意味着数据库设计有缺陷。