InvalidOperationException при повторном вызове SaveChanges в .NET Entity Framework - PullRequest
1 голос
/ 11 июля 2019

Я загружаю файл Excel в базу данных. Нет проблем с первой загрузкой. База данных обновляется при второй загрузке, но я получаю сообщение об ошибке.

Это код для загрузки данных Excel:

public void ImportData(String conString)
{
        string query = "Select [Donem],[Marka],[Tuketim] from [Sheet1$]";
        OleDbConnection con = new OleDbConnection(conString);

        if (con.State == System.Data.ConnectionState.Closed)
        {
            con.Open();
        }

        OleDbCommand cmd = new OleDbCommand(query, con);
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);

        DataSet ds = new DataSet();
        da.Fill(ds);
        da.Dispose();
        con.Close();
        con.Dispose();

        context.Database.ExecuteSqlCommand("TRUNCATE TABLE [CSProjectTable]");

        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            context.CSProjectTables.Add(new CSProjectTable
            {
                Donem = Convert.ToDouble(dr["Donem"]),
                Marka = dr["Marka"].ToString(),
                Tuketim = Convert.ToDouble(dr["Tuketim"])
            });
        }

        context.SaveChanges();
}

MyModel.Context.cs:

public partial class CSProjectDatabaseEntities : DbContext
{
    public CSProjectDatabaseEntities ()
        : base("name=CSProjectDatabaseEntities ")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<CSProjectTable> CSProjectTables { get; set; }
}

Мой файл edmx и раздел SSDL имеют StoreGeneratedPattern="Identity".

public partial class CSProjectTable
{
    public int Id { get; set; }
    public Nullable<double> Donem { get; set; }
    public string Marka { get; set; }
    public Nullable<double> Tuketim { get; set; }
}

Я получаю эту ошибку:

System.InvalidOperationException: 'Изменения в базе данных были успешно приняты, но при обновлении контекста объекта произошла ошибка. ObjectContext может быть в несовместимом состоянии. Внутреннее сообщение об исключении: сбой при сохранении или принятии изменений, так как несколько сущностей типа DatabaseLayer.CSProjectTable имеют одинаковое значение первичного ключа. Убедитесь, что явно установленные значения первичного ключа являются уникальными. Убедитесь, что сгенерированные базой данных первичные ключи правильно настроены в базе данных и в модели Entity Framework. Используйте Entity Designer для конфигурации базы данных сначала / модели первой. Используйте свободно распространяемый API HasDatabaseGeneratedOption или DatabaseGeneratedAttribute для конфигурации Code First.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...