我有一个应用程序,它使用以下(Employee)域模型用于SQL Server和Oracle数据提供程序。此模型适用于Oracle数据提供程序,但同样会给SQL Server带来错误。当我将字段“ ID ”从十进制更改为 Int 时,它适用于SQL Server但在Oracle中出错。
在应用程序配置上,我正在将数据提供程序从SQL Server更改为Oracle,反之亦然。
当IDENTITY_INSERT设置为OFF时,无法在表'Employee'中为identity列插入显式值。*
ORA-01400:无法插入NULL(“Emp”。“Employee”。“ID”)
public class Employee
{
[Key, Column(Order = 0)]
public decimal ID { get; set; }
public string NAME { get; set; }
}
if (ID == null || ID == 0)
{
Model.Employee obj = new Model.Employee();
obj.NAME = Name;
if (Convert.ToInt32(ConfigurationSettings.AppSettings["DataProviderType"]) == "Oracle")
obj.ID = GetNextId();
DbContext.Employees.Add(obj);
DbContext.SaveChanges();
}
SQL Server表脚本
CREATE TABLE [dbo].[Employee](
[ID] [int] IDENTITY(1,1) NOT NULL,
[NAME] [varchar](256) NULL,
CONSTRAINT [Employee_PK] 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]
Oracle表脚本
CREATE TABLE Employee
(
"ID" NUMBER NOT NULL ENABLE,
"NAME" VARCHAR2(256)
);
CREATE UNIQUE INDEX "PK_Employee" ON "Employee" ("ID");
ALTER TABLE "Employee" ADD CONSTRAINT "Employee_PK" PRIMARY KEY ("ID") ENABLE;
如何在我的应用程序中处理此问题,即在DOTNET Side? p>
答案 0 :(得分:0)
根据@IvanStoev的建议,我在SQL Server中将数据类型从 int 更改为数字IDENTITY(1,1)NOT NULL。。并使用以下代码处理IDENTITY_INSERT错误
modelBuilder.Entity<Employee>().Property(i => i.ID).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
希望这可以帮助有类似问题的人。