В новом проекте WPF, который я пишу с использованием c #, я хочу попытаться использовать Entity Framework Core для взаимодействия с моей базой данных SQL Server.
Каждый раз, когда я пытаюсь добавитьВ зависимости от модели, я получаю следующую ошибку
Невозможно вставить явное значение для столбца идентификаторов в таблице «Заказы», если для параметра IDENTITY_INSERT установлено значение OFF.
Я используюRepository
и UnitOfWork
, которые оборачивают методы Entity Framework Core для выполнения необходимой работы.
Но, проще всего, я выполняю следующий код
var order = new Order();
order.Title = "some";
....
Context.Orders.Add(order);
Context.SaveChanges();
Вот моя модель
public class Order
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Int64 Id { get; set; }
public string Status { get; set; }
public int? CustomerId { get; set; }
public DateTime? Birthdate { get; set; }
public int UtcOffset { get; set; }\
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public int? UpdatedBy { get; set; }
[ForeignKey(nameof(Creator))]
public int CreatedBy { get; set; }
public Order()
{
CreatedAt = DateTime.UtcNow;
}
public virtual User Creator { get; set; }
public virtual Customer Customer { get; set; }
}
Что может быть причиной этой проблемы?
Обновлено
Вот как создается моя таблица
CREATE TABLE [dbo].[Orders](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Status] [varchar](50) NOT NULL,
[CustomerId] [int] NULL,
[Birthdate] [datetime] NULL,
[CreatedBy] [int] NOT NULL,
[CreatedAt] [datetime] NOT NULL,
[UpdatedBy] [int] NULL,
[UpdatedAt] [datetime] NULL,
[UtcOffset] [int] NOT NULL,
CONSTRAINT [PK_Orders] 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]
Вот метод, который создает Order
модель
public Order Create(int? customerId, DateTime? birthdate)
{
var order = new Order();
order.CustomerId = customerId;
order.Birthdate = birthdate;
order.Status = OrderStatus.Sold.ToString();
order.CreatedBy = Passport.Identity.Id;
var updatedOrder = Orders.Add(order);
Orders.Save();
return updatedOrder;
}
Вот моя реализация репозитория
public class EntityRepository<TEntity, TKeyType> : IRepository<TEntity, TKeyType>
where TEntity : class
where TKeyType : struct
{
protected readonly DbContext Context;
protected readonly DbSet<TEntity> DbSet;
public EntityRepository(DbContext context)
{
Context = context;
DbSet = context.Set<TEntity>();
}
public TEntity Get(TKeyType id)
{
return DbSet.Find(id);
}
public IEnumerable<TEntity> GetAll()
{
return DbSet.ToList();
}
public bool Any(Expression<Func<TEntity, bool>> predicate)
{
return DbSet.Any(predicate);
}
public IQueryable<TEntity> Find(Expression<Func<TEntity, bool>> predicate)
{
return DbSet.Where(predicate);
}
public TEntity SingleOrDefault(Expression<Func<TEntity, bool>> predicate)
{
return DbSet.SingleOrDefault(predicate);
}
public virtual TEntity Add(TEntity entity)
{
DbSet.Add(entity);
return entity;
}
public virtual IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
DbSet.AddRange(entities);
return entities;
}
public void Remove(TEntity entity)
{
DbSet.Remove(entity);
}
public void RemoveRange(IEnumerable<TEntity> entities)
{
DbSet.RemoveRange(entities);
}
public void Update(TEntity entity)
{
DbSet.Attach(entity);
var record = Context.Entry(entity);
record.State = EntityState.Modified;
}
public IQueryable<TEntity> Query()
{
return DbSet;
}
public void Save()
{
Context.SaveChanges();
}
}
public class EntityRepository<TEntity> : EntityRepository<TEntity, int>
where TEntity : class
{
public EntityRepository(DbContext context)
: base(context)
{
}
}
Кроме того, этот вопрос не является дубликатом для Ошибка Entity Framework: Невозможно вставить явное значение для столбца идентификаторов в таблице , поскольку я украшаю свое свойство Idс [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
.Более того, я использую базу данных в первую очередь, поэтому я создал свою базу данных вручную, используя MSSMS