使用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; }
...
}

使用MVC3和EF将特定目录中的文件名称更新到数据库

我试图从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 );