Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC如何将文件路径传递到PeopleDB?_C#_Asp.net_Asp.net Mvc_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

C# ASP.NET MVC如何将文件路径传递到PeopleDB?

C# ASP.NET MVC如何将文件路径传递到PeopleDB?,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我是一个使用实体框架的ASP.NET新手。我有不同的人模型、文件类型和文件路径。我想通过从FilPath中检索文件路径以及索引视图中的名称、年龄等数据来显示图像。我在详细视图中做到了这一点,但在索引视图页面中,我收到了“值不能为null”的错误,这是由于PeopleDB中的文件路径为null造成的。 下面是我的代码,请帮忙。谢谢 /Model/PeopleDB.cs namespace MvcDemo.Models { public class PeopleDB {

我是一个使用实体框架的ASP.NET新手。我有不同的人模型、文件类型和文件路径。我想通过从FilPath中检索文件路径以及索引视图中的名称、年龄等数据来显示图像。我在详细视图中做到了这一点,但在索引视图页面中,我收到了“值不能为null”的错误,这是由于PeopleDB中的文件路径为null造成的。
下面是我的代码,请帮忙。谢谢

/Model/PeopleDB.cs

namespace MvcDemo.Models {
    public class PeopleDB
    {
        public PeopleDB()
        {
         this.FilePaths = new HashSet<FilePath>();
        }

        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }
        public string Interests { get; set; }
        public ICollection<FilePath> FilePaths { get; set; }
    }


    public class PeopleDBContext : DbContext
    {
        public DbSet<FilePath> FilePaths { get; set; }
        public DbSet<PeopleDB> People { get; set; }      

    }

     }
Moedel/FileType.cs

    namespace Assessment_HC.Models
{
    public enum FileType
    {
        Avatar = 1, Photo
    }
}
这是索引视图的控制器

//Get: /People/Index
public ActionResult Index()
{
    return View(db.People.ToList());
}
在db.People.ToList()中,People.FilePath视图为空

在控制器中,详细视图如下所示,从中我可以获得显示在详细页面上的图像:

// GET: /People/Details

public ActionResult Details(int id = 0)
{
    PeopleDB peopledb = db.People.Find(id);
    PeopleDB people = db.People.Include(i => i.FilePaths).SingleOrDefault(i => i.ID == id);
    if (peopledb == null)
    {
        return HttpNotFound();
    }
    return View(peopledb);
}

谢谢你的帮助。如果您需要更多代码,请告诉我

根据评论,似乎您唯一应该做的事情就是将
PeopleDB
filepath
属性更改为
virtual
以使用延迟加载(默认情况下已启用):

有关详细信息,请执行以下操作:

var people = db.People.Where(x => x.ID == id).FirstOrDefault();
if (people == null)
{
    return HttpNotFound();
}
return View(people );    
但无论如何,如果禁用延迟加载,您应该使用
Include
在结果中包含导航属性。在这种情况下,您可以使用以下方法在索引操作中加载数据:

db.People.Include(x => x.FilePaths).ToList()

要禁用延迟加载,您可以

db.Configuration.LazyLoadingEnabled = true;
或者在上下文的构造函数中:

this.Configuration.LazyLoadingEnabled = false;
更多信息:

延迟加载是一个实体或集合 实体在第一次加载时自动从数据库加载 访问引用实体的属性。使用时 POCO实体类型,通过创建 派生的代理类型,然后重写虚拟属性以添加 装载钩


我已经测试了代码,您只需要使用
Include
方法启用:

    public ActionResult Index()
    {
        var _db = new ApplicationDbContext();
        var model = _db.People.Include("FilePaths").ToList();
        return View(model);
    }
在这种情况下,将加载所有相关的文件路径

您还可以将文件路径设置为虚拟路径:

public virtual ICollection<FilePath> FilePaths { get; set; }

在这两种情况下,将加载所有相关文件路径。

感谢您的快速响应。我刚刚尝试了一下,但得到了相同的错误,PeopleDB中的文件路径仍然为空。LazyLoading是启用还是禁用的?它的构造函数代码不在你发布的代码中。我不知道如何检查懒散的加载。这里是我拥有的:公共类PeopleController:Controller{private PeopleDBContext db=new PeopleDBContext();@JialuZhu看看你的dbcontext类,在构造函数中,如果存在
this.Configuration.LazyLoadingEnabled=false;
那么LazyLoading是不允许的Hanks Reza,我通过将文件路径更改为虚拟来实现它。通过使文件路径虚拟对我来说很好。谢谢Sirwan。
db.Configuration.LazyLoadingEnabled = true;
this.Configuration.LazyLoadingEnabled = false;
    public ActionResult Index()
    {
        var _db = new ApplicationDbContext();
        var model = _db.People.Include("FilePaths").ToList();
        return View(model);
    }
public virtual ICollection<FilePath> FilePaths { get; set; }
var model = _db.People.ToList();