如果表已存在或不存在,您需要檢查是否存在初始腳本。它不是EF問題,即使您嘗試僅使用表定義而不檢查現有表創建數據庫腳本,它也會失敗。
例如,
我沒有任何數據庫安裝到我的機器,我有用於創建新的一些表到它的腳本..
所以這是腳本創建表
USE [TestStudent]
GO
/****** Object: Table [dbo].[EmployeeInformation] Script Date: 18-03-2017 19:12:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[EmployeeInformation](
[Id] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[Designation] [nvarchar](50) NULL,
CONSTRAINT [PK_EmployeeInformation] 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
/****** Object: Table [dbo].[sample] Script Date: 18-03-2017 19:12:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[sample](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TableId] [int] NULL,
CONSTRAINT [PK_sample] 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
請注意,我只是創建表不檢查對象的存在,如果我現在對新機的空白數據庫將運行沒有錯誤運行此..
現在,我嘗試在現有的數據庫上運行相同的腳本,並使用現有的對象來更新一些表,就像在你的情況下一樣,但是這裏的技巧,你的更新腳本將在這個底部...所以它將首先嚐試創建表,如果存在它會拋出你的錯誤..
所以你需要在創建表之前,想在這個腳本來檢查對象是否存在...
USE [TestStudent]
GO
/****** Object: Table [dbo].[EmployeeInformation] Script Date: 18-03-2017 19:22:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[EmployeeInformation]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[EmployeeInformation](
[Id] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[Designation] [nvarchar](50) NULL,
CONSTRAINT [PK_EmployeeInformation] 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]
END
GO
/****** Object: Table [dbo].[sample] Script Date: 18-03-2017 19:22:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sample]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[sample](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TableId] [int] NULL,
CONSTRAINT [PK_sample] 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]
END
GO
所以當你嘗試運行它,它會跳過已經存在這是在表對象將進入你的更新腳本...
希望這有助於...
嘗試使用命令更新數據庫-verbose ...在失敗後向上滾動,您將看到哪個表導致問題 –
Update-Database可以工作,但是,當我在任何客戶端系統上構建安裝文件並進行部署時,它會嘗試應用InitialCreate遷移並重新創建所有表,從而導致出錯作爲** XYZ表已經存在** –