使用MVC3和EF将特定目录中的文件名称更新到数据库
本文关键字:文件名 更新 数据库 MVC3 EF 使用 | 更新日期: 2023-09-27 18:17:01
我正在与偏头痛作斗争。我看不出这个问题的解决办法。
我有一个名为dr405的表,预加载了数据。我的应用程序只使用信息更新表中的现有行。
我有一个名为Save
的服务方法,在这个保存方法中,我将给定DR405
实体的状态设置为modified,然后调用SaveChanges
。
现在我试图添加另一个步骤,我有一个名为DR405files
的模型,它是使用1:N关系的DR405
的子模型。我想调用一个方法GetUploadedFiles()
,该方法将检查名称与文件的dr405主键匹配的目录,然后将文件名插入表dr405files
。
我已经在类和数据库中设置了模型之间的关系。我甚至编写了将文件名正确插入dr405files
的代码。但是,在我运行一次应用程序之后,它在p
上连续运行时抛出一个Null Reference异常。
如有任何帮助,不胜感激
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; }
...
}
我试图从obj.dr405文件加载。它还没有实例化。我把代码改成了根据上下文提取。dr405files……瞧!
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 uploadedFiles = this.GetUploadedFiles(obj.TangiblePropertyId);
if (uploadedFiles !=null && uploadedFiles.Count > 0)
{
uploadedFiles.ForEach(p=> {
var item = context.dr405files.FirstOrDefault(f => f.FileName == p.Name && f.TangiblePropertyId == obj.TangiblePropertyId );
标题>