2014-02-18 84 views
0

我试图找出如何重建下列SQL到适当的迁移到MySQL表MSSQL到MySQL迁移

CREATE TABLE [LinkedAccountClaims](
[UserAccountID] [uniqueidentifier] NOT NULL, 
[ProviderName] [nvarchar](30) NOT NULL, 
[ProviderAccountID] [nvarchar](100) NOT NULL, 
[Type] [nvarchar](150) NOT NULL, 
[Value] [nvarchar](150) NOT NULL, 
CONSTRAINT [PK_LinkedAccountClaims] PRIMARY KEY CLUSTERED 
(
[UserAccountID] ASC, 
[ProviderName] ASC, 
[ProviderAccountID] ASC, 
[Type] ASC, 
[Value] ASC) 

CREATE NONCLUSTERED INDEX [IX_UserAccountID] ON [LinkedAccountClaims] 
( [UserAccountID] ASC) 

ALTER TABLE [LinkedAccountClaims] WITH CHECK ADD CONSTRAINT  [FK_LinkedAccountClaims_UserAccounts_UserAccountID] FOREIGN KEY([UserAccountID]) 
REFERENCES [UserAccounts] ([ID]) 
ON DELETE CASCADE 

到其构造迁移如下

CreateTable(
      "LinkedAccountClaims", 
      c => new 
      { 
       UserAccountID = c.String(nullable: false, maxLength: 38, storeType: "char"), 
       ProviderName = c.String(nullable: false, maxLength: 30, storeType: "nvarchar"), 
       ProviderAccountID = c.String(nullable: false, maxLength: 100, storeType: "nvarchar"), 
       Type = c.String(nullable: false, maxLength: 150, storeType: "nvarchar"), 
       Value = c.String(nullable: false, maxLength: 150, storeType: "nvarchar"), 
      }) 
      .PrimaryKey(t => t.UserAccountID) 
      .PrimaryKey(t => t.ProviderName) 
      .PrimaryKey(t => t.ProviderAccountID) 
      .PrimaryKey(t => t.Type) 
      .PrimaryKey(t => t.Value) 
      .Index(t => t.UserAccountID); 

我不确定我在迁移中正确执行主键集群,并且我不确定如何处理外键。

UPDATE: 即正确聚类主键,并添加您使用代码foregin关键,像这样

.ForeignKey("UserAccounts", t => t.UserAccountID, cascadeDelete: true) 
+0

那不是MySQL'create table'语句。你在这里得到的是LINQ查询。那么你的问题是什么? – 2014-02-18 18:59:12

+0

这是一个sql迁移到mysql数据库。它创建的表很好,但我手动做外键。我想知道如何在linq迁移代码中执行此操作,并且如果处理主键的方式确实将它们设置为sql显示的集群。 – dinotom

+0

我不会在LINQ中这样做,我敢肯定有人可能会在LINQ中找到一种方法,但为此,您应该只写MySQL创建表语法。 http://dev.mysql.com/doc/refman/5.0/en/create-table.html – 2014-02-18 19:03:31

回答

0

MySQL是在语法和支持有点不同与其他人尝试。请勿在表中使用多个主键

CREATE TABLE LinkedAccountClaims(
UserAccountID int unique NOT NULL , 
ProviderName varchar(30) NOT NULL, 
ProviderAccountID varchar(100) NOT NULL, 
Type varchar(150) NOT NULL, 
Value varchar(150) NOT NULL, 
primary key (UserAccountID) 
); 

CREATE INDEX IX_UserAccountID ON LinkedAccountClaims 
(UserAccountID); 

ALTER TABLE LinkedAccountClaims ADD CONSTRAINT FK_LinkedAccountClaims_UserAccounts_UserAccountID FOREIGN KEY(UserAccountID) 
REFERENCES UserAccounts(ID) 
ON DELETE CASCADE; 
+0

是的,这可以在工作台上工作,但是我在迁移时会这样做。无论如何,我已经整理出来了。 – dinotom

0

您是否考虑过使用Pentaho数据集成进行转换?