我使用的是SQL Server 2008 R2。
我想将列的数据类型(Size
)从decimal
更改为int
。首先,我使用了SQL Server的设计者,但SQL Server不允许我这样做。请注意图片。
然后我决定写一个脚本。但是我收到了一个错误。
如何使用SQL脚本执行此操作?
如何通过db-migration执行此操作?
我使用了Entity Framework 6.x,C#和代码优先的方法来创建数据库。我想在Tag
表中保存我的数据。
有没有比db-migration更好的工具?我觉得很无聊!
我的模特:
namespace Jahan.Blog.Model
{
public class Tag : Entity, ITag
{
[Range(1, 4)]
public virtual int Size { get; set; } //In db data type of Size is decimal.I want to change it to int.
[Required]
[StringLength(25)]
public virtual string Title { get; set; }
[StringLength(256)]
public virtual string Description { get; set; }
public virtual bool IsActive { get; set; }
public virtual ISet<ArticleTag> ArticleTags { get; set; } // FK
public virtual ISet<ProjectTag> ProjectTags { get; set; } // FK
}
}
SQL脚本:
USE [Jahan-Blog]
GO
/****** Object: Table [dbo].[Tag] Script Date: 10/23/2014 16:17:09 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Tag]') AND type in (N'U'))
DROP TABLE [dbo].[Tag]
GO
USE [Jahan-Blog]
GO
/****** Object: Table [dbo].[Tag] Script Date: 10/23/2014 16:17:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tag](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](25) NOT NULL,
[Description] [nvarchar](256) NULL,
[IsActive] [bit] NOT NULL,
[Size] [int] NOT NULL,
[CreatedDate] [datetime] NULL,
[ModifiedDate] [datetime] NULL,
CONSTRAINT [PK_dbo.Tag] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
运行脚本后出现此错误。
Msg 3726,Level 16,State 1,Line 4
无法丢弃对象&#39; dbo.Tag&#39; 因为它是由FOREIGN KEY约束引用的。Msg 2714,Level 16,State 6,Line 2
已有一个名为&#39; Tag&#39;在里面 数据库中。
DbMigrations配置:
namespace Jahan.Blog.Web.Mvc.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
//For knowing more information about db-migration please visit http://msdn.microsoft.com/en-gb/data/jj591621
internal sealed class Configuration
: DbMigrationsConfiguration<Jahan.Blog.Web.Mvc.Models.JahanBlogDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
}
protected override void Seed(Jahan.Blog.Web.Mvc.Models.JahanBlogDbContext context)
{
}
}
}
答案 0 :(得分:3)
要使用SQL更改类型,请运行以下
Alter table dbo.[Tag] alter column [Size] int NOT NULL
要通过EF迁移使用
更改类型AlterColumn("dbo.Tag", "Size", c => c.Int(nullable: false));
答案 1 :(得分:1)
为了能够在SQL Server设计器中进行更改,请在“工具”菜单上单击“选项”,展开 设计人员,然后单击表和数据库设计器。 清除“阻止保存需要该表的更改” 重新创建复选框。