我是LINQ to SQL的新手,但过去做过很多数据库开发。
我刚开始使用的软件使用:
// MyDataContext is a sub class of DataContext, that is generated with SqlMetal
MyDataContext db = new MyDataContext (connectionString);
db.CreateDatabase();
在首次运行时创建数据库。
我需要在表格中添加一些索引.... 如何告诉DataContext我想要哪些索引?
否则如何控制?
(我可以使用sql脚本,但我喜欢db。CreateDatabase将始终创建一个与数据访问代码匹配的数据库的理想)
(为了更好或更糟,软件可以完全访问数据库服务器,我们的软件经常创建数据库以存储模型运行结果等,所以请不要告诉我我们不应该从代码创建数据库)
我似乎不是唯一一个在DataContext.CreateDatabase()上遇到限制的人也参见http://csainty.blogspot.com/2008/02/linq-to-sql-be-careful-of.html
答案 0 :(得分:1)
据我所知,DataContext.CreateDatabase
方法只能创建主键。
当您直接查看DBML时,您将看到没有用于定义索引的元素。因此,恕我直言,假设CreateDatabase不能这样做。
因此,我能够“自动”创建索引的唯一方法是首先调用DataContext.CreateDatabase
,然后调用DataContext.ExecuteCommand
将索引添加到刚刚创建的表中。
答案 1 :(得分:0)
您可以在DatabaseCreated方法上执行SQL命令。
public partial class DatabaseModelsDataContext : System.Data.Linq.DataContext
{
partial void OnCreated ()
{
var cmdText = @"
IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_LeafKey')
DROP INDEX IX_MyTableColumn
ON [mydb].[dbo].[Leaf];
CREATE INDEX IX_MyTableColumn
ON [mydb].[dbo].[MyTable] ([column]) ;";
ExecuteCommand(cmdText);
}
}