Итак, я борюсь с мигренью. Я не вижу решения этой проблемы.
У меня есть таблица с именем dr405, которая предварительно загружена данными. Мое приложение обновляет только существующие строки в таблице с информацией.
У меня есть сервисный метод с именем Save
. В этом методе сохранения я устанавливаю состояние в моем контексте для данного объекта DR405
, чтобы изменить, а затем вызываю SaveChanges
. Это работает, как и ожидалось.
Теперь я пытаюсь добавить еще один шаг, где у меня есть модель с именем DR405files
, которая является дочерней по отношению к DR405
с использованием отношения 1: N. Я хочу вызвать метод GetUploadedFiles()
, который проверит каталог, имя которого соответствует первичному ключу dr405 для файлов, а затем вставит в таблицу dr405files
имена файлов.
Я установил отношения между Моделями как в классах, так и в Базе данных. Я даже написал код, который будет правильно вставлять имена файлов в dr405files
. Однако после однократного запуска приложения оно вызывает исключительную ситуацию Null Reference при последовательных запусках p
.
Любая помощь будет принята с благодарностью
public void Save(DR405DBContext context, dr405 obj)
{
obj.ModDate = DateTime.Now;
context.Entry(obj).State = EntityState.Modified;
var uploadedFiles = this.GetUploadedFiles(obj.TangiblePropertyId);
if (uploadedFiles !=null && uploadedFiles.Count > 0)
{
uploadedFiles.ForEach(p=> {
var item = new dr405files { TangiblePropertyId = obj.TangiblePropertyId, FileName = p }; <---Exception Occurs here.
if(!obj.dr405files.Contains(item))
{
var fileItem = new dr405files { TangiblePropertyId = obj.TangiblePropertyId, FileName = p };
context.Entry(fileItem).State = fileItem.FileId == 0 ? EntityState.Added : EntityState.Modified;
}
});
}
context.SaveChanges();
}
public List<String> GetUploadedFiles(String id)
{
var saveLocation = Path.Combine(DR405Service.SavePath + GetDR405ById(new DR405DBContext(), id).TangiblePropertyId);
Directory.CreateDirectory(saveLocation);
return Directory.GetFiles(saveLocation).ToList();
}
public class dr405files
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int FileId { get; set; }
public String TangiblePropertyId { get; set; }
public String FileName { get; set; }
}
public class dr405
{
[Key]
public String TangiblePropertyId { get; set; }
public DateTime CreateDate { get; set; }
public DateTime ModDate { get; set; }
public String PreparerName { get; set; }
...
}