SqlException:无法在表中为identity列插入显式值

时间:2018-06-09 17:48:20

标签: c# sql-server database entity-framework

起初我很抱歉在Code中使用我的母语,但这是我的大学项目,我们的项目负责人命令我们这样写。 我正在使用Entity Framework和C#开发数据库项目。 简而言之,我创建了一个名为“Osoba”和“Klient”类的类,它继承自“Osoba”。 问题是,当我尝试向数据库添加新的“Klient”时,我仍然会收到如下错误:

  

System.Data.Entity.Infrastructure.DbUpdateException:“更新条目时发生错误。有关详细信息,请参阅内部异常。“

     

SqlException:当IDENTITY_INSERT设置为OFF时,无法在表'Klient'中为identity列插入显式值。

我在网上研究过类似的问题,但是所有这些问题都是因为在向表中添加新对象时出现“硬编码”ID而出现的。我实际上并没有这样做。

这是Osoba课程:

[Table("Osoba")]
public class Osoba
{
    public int ID { get; set; }
    public string Imie { get; set; }
    public string Nazwisko { get; set; }
    public string Telefon { get; set; }
    public string Adres { get; set; }
    public string Mail { get; set; }
    public int IloscTransakcji { get; set; }
    public string Typ { get; set; }

    public override string ToString()
    {
        return "Imie: " + Imie + "\t Nazwisko: " + Nazwisko + "\t Adres: " + Adres;
    }
}

Klient类:

[Table("Klient")]
public class Klient: Osoba
{
    public int ID { get; set; }
    public string Pracownik { get; set; }
    public int Sprzedane { get; set; }
    public int Kupione { get; set; }
    public string Preferencje { get; set; }

    public override string ToString()
    {
        return "Obslugujacy pracownik: " + Pracownik + "\t Sprzedane: " + Sprzedane.ToString() + "\t Kupione: " + Kupione.ToString();
    }
}

我的数据库背景:

 public class BazyDanychContext : DbContext
{
    public BazyDanychContext() : base("ProjektBD8")
    {
    }

    public DbSet<Osoba> Osoba { get; set; }
    public DbSet<Klient> Klient { get; set; }
    public DbSet<Pracownik> Pracownik { get; set; }
    public DbSet<Nieruchomosc> Nieruchomosc { get; set; }
    public DbSet<Biuro> Biuro { get; set; }
    public DbSet<Dom> Dom { get; set; }
    public DbSet<Grunt> Grunt { get; set; }
    public DbSet<Hala> Hala { get; set; }
    public DbSet<Mieszkanie> Mieszkanie { get; set; }
    public DbSet<Spotkanie> Spotkanie { get; set; }
    public DbSet<Umowa> Umowa { get; set; }
} 

最后,我将如何将新的Klient添加到数据库中:

private void KlientAdd_Click(object sender, RoutedEventArgs e)
    {
        using (var ctx = new BazyDanychContext())
        {

            Klient tmp = new Klient { Imie = KlientImie.Text, Nazwisko = KlientNazwisko.Text, Telefon = KlientTelefon.Text, Adres = KlientAdres.Text, Mail = KlientMail.Text, IloscTransakcji = Int32.Parse(KlientIloscTransakcji.Text), Typ = "Klient" , Pracownik = KlientPracownik.Text, Sprzedane = Int32.Parse(KlientSprzedane.Text), Kupione = Int32.Parse(KlientKupione.Text), Preferencje = KlientPreferencje.Text };
            ctx.Osoba.Add(tmp);
            ctx.SaveChanges();
        }
        InitTabs();
    }

1 个答案:

答案 0 :(得分:0)

因此,对我来说,最终解决方案是删除项目中的所有迁移。删除我的数据库后,删除所有迁移,然后重新创建数据库而不在我的项目中进行任何迁移它最终工作。谢谢你的所有建议。