首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用DataContext.CreateDatabase()时控制数据库索引的创建

如何在使用DataContext.CreateDatabase()时控制数据库索引的创建
EN

Stack Overflow用户
提问于 2010-02-26 09:52:57
回答 2查看 493关注 0票数 2

我刚开始使用LINQ,但在过去做了很多数据库开发。

我刚刚开始使用的软件是:

代码语言:javascript
复制
// 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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-03 00:00:22

据我所知,DataContext.CreateDatabase方法只能创建主键。

当您直接查看DBML时,您将看到没有用于定义索引的元素。因此,IMHO,除了假设CreateDatabase不能这样做外,也是如此。

因此,我认为“自动”创建索引的唯一方法是首先调用DataContext.CreateDatabase,然后调用DataContext.ExecuteCommand将索引添加到刚刚创建的表中。

票数 1
EN

Stack Overflow用户

发布于 2016-07-13 10:50:22

可以在DatabaseCreated方法上执行SQL。

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2340701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档