DataContext.CreateDatabase使用随机顺序的列创建数据库

时间:2011-08-22 13:10:01

标签: 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命令)。这就是我寻找列顺序的一个原因。

1 个答案:

答案 0 :(得分:4)

在其内部,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