Я создал модель данных сущности ADO.NET и выбрал EF Designer из базы данных.В моей таблице Cage есть столбец с первичным ключом Identity CageNo.У меня есть код, подобный этому:
public static void Insert<T>(this DbContext context, T obj, bool InsertKeepIdentity = false) where T : class
{
if (InsertKeepIdentity)
{
context.SetIdentityInsert<T>(true);
}
context.Entry(obj).State = EntityState.Added;
if (InsertKeepIdentity)
{
context.SaveChanges();
context.SetIdentityInsert<T>(false);
}
}
public static string GetTableName<T>(this DbContext context) where T : class
{
ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
return objectContext.GetTableName<T>();
}
public static string GetTableName<T>(this ObjectContext context) where T : class
{
string sql = context.CreateObjectSet<T>().ToTraceString();
Regex regex = new Regex("FROM (?<table>.*) AS");
Match match = regex.Match(sql);
string table = match.Groups["table"].Value;
return table;
}
public static int SetIdentityInsert<T>(this DbContext context, bool isOn) where T : class
{
return context.Database.ExecuteSqlCommand($"SET IDENTITY_INSERT {context.GetTableName<T>()} {(isOn ? "ON" : "OFF")}");
}
У меня есть ошибка, подобная этой:
SqlException: Явное значение должно быть указано для столбца идентификаторов в таблице 'Cage' либо когда установлен IDENTITY_INSERTON или когда пользователь репликации вставляет в столбец идентификации NOT FOR REPLICATION.
запрос, подобный следующему:
exec sp_executesql N'INSERT [dbo]. [Cage] ([CageId], [IsActive], [Амортизация], [Описание], [CreatedOn], [ОбновленоOn], [SeedlingNo], [IsSystem]) ЗНАЧЕНИЯ (@ 0, @ 1, @ 2, NULL, @ 3,@ 4, @ 5, @ 6) ВЫБРАТЬ [CageNo] ИЗ [dbo]. [Cage] WHERE @@ ROWCOUNT> 0 И [CageNo] = scope_identity () ', N' @ 0 varchar (100), @ 1 бит,@ 2 десятичных (19,4), @ 3 datetime2 (7), @ 4 datetime2 (7), @ 5 bigint, @ 6 бит ', @ 0 =' K0001 ', @ 1 = 1, @ 2 = 2000.0000, @3 = '2019-06-29 10: 51: 26.6570000', @ 4 = '2019-07-03 17: 22: 16.1011887', @ 5 = 4, @ 6 = 0
ТаблицаCage:
CREATE TABLE [dbo].[Cage]
(
[CageNo] BIGINT NOT NULL IDENTITY ,
[CageId] VARCHAR(100) NOT NULL,
[IsActive] BIT NOT NULL,
[Depreciation] MONEY NOT NULL,
[Description] VARCHAR(MAX) NULL,
[CreatedOn] DATETIME NOT NULL,
[UpdatedOn] DATETIME NOT NULL,
[SeedlingNo] BIGINT NULL,
[IsSystem] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_Cage] PRIMARY KEY ([CageNo]),
CONSTRAINT [AK_Cage_Column] UNIQUE ([CageId])
)
Почему запрос для CageNo не вставлен или не сгенерирован?