Я пишу приложение с 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>]