实体框架6 - SQL Server和Oracle(SaveChanges)

时间:2018-03-05 10:01:43

标签: entity-framework-6

我有一个应用程序,它使用以下(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?

1 个答案:

答案 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);

希望这可以帮助有类似问题的人。