У меня есть кусок кода, где я обновляя запись в моей базе данных, копирование, что объект с помощью ValueInjector, а затем пытается добавить, что новый объект в свою базу данных с помощью Entity Framework:Entity Framework вставляет неверные данные?
//Get record to update
File currentFile = db.Files.First(t => t.FileId == updatedFile.FileId && t.CustomerId == PrimaryUser);
currentFile.ToLanguage = 2; //update that record
File copy = Helpers.CopyFile(currentFile); //copy the currentFile
copy.FileId = Guid.NewGuid();
copy.ToLanguage = 3;
copy.Project = null;
db.Files.Add(copy); //add new record to the database
db.SaveChanges();
Определение для CopyFile:
public static VerbalInk.Data.File CopyFile(Data.File source)
{
Data.File newFile = new Data.File();
newFile.InjectFrom(source);
return newFile;
}
когда я устанавливаю точку останова в моей db.Files.Add(copy);
линии, а затем посмотреть copy.ToLanguage
имеет ожидаемое значение 3
, но по какой-то причине, когда я сохранить свои изменения в базу данных обе запись имеет значение 2 для ToLanguage
.
Есть ли у кого-нибудь идеи, почему это происходит и как я могу получить правильное значение для ToLanguage
?
UPDATE:
Я обнаружил, что если отключить отложенной загрузки для моего контекста данных, используя строку ниже:
db.Configuration.LazyLoadingEnabled = false;
тогда все обновления, как ожидалось. Может кто-нибудь объяснить, почему это произойдет? Есть ли способ заставить мой код работать без отключения ленивой загрузки?
File
определение:
public partial class File
{
public File()
{
this.FileServices = new HashSet<FileService>();
this.FileAudioVariables = new HashSet<FileAudioVariable>();
this.FileLanguages = new HashSet<FileLanguage>();
}
public System.Guid FileId { get; set; }
public System.Guid CustomerId { get; set; }
public Nullable<System.Guid> TemplateId { get; set; }
public Nullable<System.Guid> OrderId { get; set; }
public string FileName { get; set; }
public bool IsMailInFile { get; set; }
public string FileUrl { get; set; }
public Nullable<int> NumberOfSpeakers { get; set; }
public int AudioLength { get; set; }
public int BillableMinutes { get; set; }
public Nullable<int> StatusId { get; set; }
public string Notes { get; set; }
public string VirtualType { get; set; }
public System.DateTime CreateDate { get; set; }
public System.DateTime UploadDate { get; set; }
public bool Tracked { get; set; }
public bool Exported { get; set; }
public Nullable<bool> IsConverting { get; set; }
public Nullable<bool> IsInfected { get; set; }
public Nullable<System.DateTime> OrderDate { get; set; }
public Nullable<System.DateTime> StartDate { get; set; }
public Nullable<System.DateTime> DueDate { get; set; }
public Nullable<System.Guid> TranscriptionistId { get; set; }
public string TranscriptionistNotes { get; set; }
public int BillingStatusId { get; set; }
public Nullable<System.Guid> ProjectId { get; set; }
public Nullable<bool> Specialized { get; set; }
public Nullable<int> TurnaroundId { get; set; }
public Nullable<int> FromLanguage { get; set; }
public Nullable<int> ToLanguage { get; set; }
public Nullable<System.Guid> ParentFileId { get; set; }
public virtual ICollection<FileService> FileServices { get; set; }
public virtual ICollection<FileAudioVariable> FileAudioVariables { get; set; }
public virtual ServiceTurnaround ServiceTurnaround { get; set; }
public virtual Project Project { get; set; }
public virtual ICollection<FileLanguage> FileLanguages { get; set; }
public virtual Language Language { get; set; }
public virtual Language Language1 { get; set; }
}
Извините, у вас было немного времени ... странно ... мои глаза просто пропустили его полностью ... Сравните GUID обоих объектов, они одинаковы, если они есть? –
Нет единого идентификатора GUID между обоими объектами. –
Можете ли вы добавить определение для сущности файла? Я подозреваю, что у вас есть и целое число ForeignKey (ToLanguage), которое является типом значения и свойством, относящимся к языковой сущности. –