2011-08-22 28 views
4

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

是否有一个特定的原因,为什么会发生或有一些设置来控制..? 我想过使用订单,因为数字列在30左右。并且有15到20个表格。

UPDATE

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

+1

不,对不起。你关心订单的原因是你的编码标准不好。字段总是只能用名字查询。混合动力在这里没有任何借口。使用没有违反字段顺序的命令是严重的疏忽。 – TomTom

+0

我有点理解,我正在做的错误。 :) – Prakash

回答

4

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

ADD COLUMN不允许设置列位置。更一般地说,SQL(语言,天气是Oracle,MySQL或SQLServer)不提供控制列位置的工具,所以列的顺序仅取决于它们的创建顺序。

此行为仅供参考。你不应该依赖列顺序。大多数数据访问框架都会明确提出反对意见,它们不保证任何时候列的顺序不变。

另外,对于你的情况,你使用的是LINQ到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

+0

那么,我们确实有混合使用的方式。这是问题出现的地方。可能是我会在问题中更新。 – Prakash

+0

我对那里观察到的统计更加好奇。 – Prakash

+0

不,你应该更新你的代码;)按位置引用字段?如果你是初中生,请和你的老师谈谈。如果你是高级:请为比赛工作。这种类型的(初学者)错误。更新您的代码以明确指定您引用的字段。在几个月内,你会感谢所有人建议你这样做。 – TomTom