У меня проблема с созданием идентификатора снова, когда я импортирую данные в базу данных с другим идентификатором.Все данные импортируются правильно, просто то, что идентификатор (столбец идентификатора) должен быть тем, чем является импорт.
У нас есть два ключа в этой модели;ID и личность.Идентичность - это, в основном, уникальное имя экземпляра из другого источника данных, поэтому это создаст уникальную комбинацию.
Все это устанавливается с помощью OnModelCreating для DatabaseContext из класса DbContext:
modelBuilder.Entity<Observation>().HasKey(m => new {m.Instance, m.Id});
modelBuilder.Entity<Observation>().Property(m => m.Id).HasDatabaseGeneratedOption(
DatabaseGeneratedOption.Identity);
Класс выглядит следующим образом:
public class Observation
{
public string Instance { get; set; }
public int Id { get; set; }
...
}
Контекст базы данных создается только один раз в этом приложении ASP.Net MVC 3 с Ninject.
Я попытался использовать команду SQL для отключения идентификациипри добавлении новой записи, но безуспешно:
public void SetIdentiyObservation(bool isOn)
{
var state = isOn ? "ON" : "OFF";
_context.Database.SqlQuery<Observation>("SET IDENTITY_INSERT Observation @state", new SqlParameter("state", state));
}
Созданная структура таблицы в MSSQL выглядит следующим образом:
CREATE TABLE [dbo].[Observations](
[Instance] [nvarchar](128) NOT NULL,
[Id] [int] IDENTITY(1,1) NOT NULL,
...
PRIMARY KEY CLUSTERED
(
[Instance] ASC,
[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]
Любая помощь по этому вопросу приветствуется:)