@Aricce

Почему не добавляет в psql при NOT NULL GENERATED BY ALWAYS AS IDENTITY?

Суть в чем- не хочу морочиться с полем Id через секвенции или каждый раз получать последний id+1, хочу автогенерацию поля.
Когда оно NOT NULL GENERATED BY ALWAYS AS IDENTITY то через insert в SQL все нормально работает, но через EF6 выдает ошибку PostgresException: 428C9: вставить данные в столбец "Id" нельзя
Вот код настройки поля:
public void DistrictConfigure(EntityTypeBuilder<District> modelBuilder)
        {
            modelBuilder
                .ToTable("Districts", "dict");
            modelBuilder.Property(x => x.Id).UseIdentityAlwaysColumn();
        }

В SQL это выглядит так:
"Id" integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 )

А вот так пытаюсь добавить:
using (passportEntities db = new passportEntities())
            {
                db.Districts.RemoveRange(db.Districts);
                db.SaveChanges();
                db.Districts.Add(new Districts { Name="test"});
                db.SaveChanges();
            }

И выбрасывает ошибку, хотя поля Id я вообще не касаюсь никак.
Вот код самой модели:
В приложении которое создает (code first)

public class District
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Sector> Sectors { get; set; } = new List<Sector>();
    }

И в приложении которое я пишу для переноса данных из другой БД сгенерированное (Database first)
public partial class Districts
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Districts()
        {
            this.Sectors = new HashSet<Sectors>();
        }
    
        public int Id { get; set; }
        public string Name { get; set; }
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Sectors> Sectors { get; set; }
    }


Я понимаю что можно просто использовать sql раз уж он при таких настройках работает, но мне хотелось бы разобраться почему через Entity Framework не работает. Пробовал и в других таблицах ради теста где в модели ставил атрибуты
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
и результат тот же.
  • Вопрос задан
  • 698 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы