Entity Framework не обновляет сущности - PullRequest
0 голосов
/ 12 января 2020

Я пишу приложение с C# WPF и использую локальный .mdf файл базы данных с Entity Framework для добавления / обновления данных.

К сожалению, мой код не работает - исключение не выдается, но обновление / добавление строк в таблицы не приводит к изменениям фактического файла базы данных.

Определение таблицы:

CREATE TABLE [dbo].[ESP] 
(
    [IdEsp]                INT          NOT NULL,
    [DisplayName]          NVARCHAR(50) NOT NULL,
    [CryptoKey]            CHAR(64)     NOT NULL,
    [IP]                   VARCHAR(15)  NOT NULL,
    [MeasurementFrequency] INT          NOT NULL,
    PRIMARY KEY CLUSTERED ([IdEsp] ASC)
);

Класс модели:

namespace RSZMT
{
    using System;
    using System.Collections.Generic;

    public partial class ESP
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public ESP()
        {
            this.TempMeasurement = new HashSet<TempMeasurement>();
        }

        public ESP(int idEsp, string displayName, string cryptoKey, string iP, int measurementFrequency)
        {
            this.TempMeasurement = new HashSet<TempMeasurement>();
            this.IdEsp = idEsp;
            this.DisplayName = displayName;
            this.CryptoKey = cryptoKey;
            this.IP = iP;
            this.MeasurementFrequency = measurementFrequency;
        }

        public int IdEsp { get; set; }
        public string DisplayName { get; set; }
        public string CryptoKey { get; set; }
        public string IP { get; set; }
        public int MeasurementFrequency { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<TempMeasurement> TempMeasurement { get; set; }
    }
}

C# код:

public class DataAccess
{
    RSZMT_DatabaseEntities dataEntities;

    private DataAccess()
    {
        dataEntities = new RSZMT_DatabaseEntities();
    }

    ~DataAccess()
    {
        dataEntities.Dispose();
    }

    private static DataAccess instance = new DataAccess();

    public static DataAccess GetInstance()
    {
        return instance;
    }

    ...    

    public void ChangeEspName(int espId, string newName)
    {
        var ent = dataEntities.ESP.Where(s => s.IdEsp == espId).Single();
        ent.DisplayName = newName;
        dataEntities.ESP.AddOrUpdate(ent);
        var number = dataEntities.SaveChanges();               
    }
}

Я отладил это, и dataEntites.SaveChanges() возвращает 0 вместо 1 - затронутые строки.

У вас есть какие-либо идеи, что не так с моим кодом? Почему это не работает?

С уважением

РЕДАКТИРОВАТЬ : в логах есть что-то вроде этого:

2020-01-12 13:40:59.21 spid52      Setting database option OFFLINE to ON for database 'C:\USERS\FILIP\SOURCE\REPOS\RSZMT\RSZMT\RSZMT_DATABASE.MDF'.
2020-01-12 13:41:01.54 Logon       Error: 18456, Severity: 14, State: 38.
2020-01-12 13:41:01.54 Logon       Login failed for user 'DESKTOP-P04PRDM\filip'. Reason: Failed to open the explicitly specified database 'C:\USERS\FILIP\SOURCE\REPOS\RSZMT\RSZMT\RSZMT_DATABASE.MDF'. [CLIENT: <named pipe>]
2020-01-12 13:41:04.50 spid52      Starting up database 'C:\USERS\FILIP\SOURCE\REPOS\RSZMT\RSZMT\BIN\DEBUG\RSZMT_DATABASE.MDF'.
2020-01-12 13:41:04.52 spid52      Parallel redo is started for database 'C:\USERS\FILIP\SOURCE\REPOS\RSZMT\RSZMT\BIN\DEBUG\RSZMT_DATABASE.MDF' with worker pool size [4].
2020-01-12 13:41:04.52 spid52      Parallel redo is shutdown for database 'C:\USERS\FILIP\SOURCE\REPOS\RSZMT\RSZMT\BIN\DEBUG\RSZMT_DATABASE.MDF' with worker pool size [4].
2020-01-12 13:41:11.55 Logon       Error: 18456, Severity: 14, State: 38.
2020-01-12 13:41:11.55 Logon       Login failed for user 'DESKTOP-P04PRDM\filip'. Reason: Failed to open the explicitly specified database 'C:\USERS\FILIP\SOURCE\REPOS\RSZMT\RSZMT\RSZMT_DATABASE.MDF'. [CLIENT: <named pipe>]
2020-01-12 13:41:24.23 Logon       Error: 18456, Severity: 14, State: 38.
2020-01-12 13:41:24.23 Logon       Login failed for user 'DESKTOP-P04PRDM\filip'. Reason: Failed to open the explicitly specified database 'C:\USERS\FILIP\SOURCE\REPOS\RSZMT\RSZMT\RSZMT_DATABASE.MDF'. [CLIENT: <named pipe>]

1 Ответ

0 голосов
/ 12 января 2020

Наконец я это сделал. В файле Database.mdf есть свойство, называемое «копировать в выходной каталог», и по умолчанию оно установлено на «Всегда копировать», а я изменил на «Никогда не копировать», и теперь все работает хорошо. Большое спасибо, ребята, за все ответы

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