【问题标题】:MVC code first approach not fetching data from table using DbContextMVC 代码优先方法不使用 DbContext 从表中获取数据
【发布时间】:2020-09-14 15:01:32
【问题描述】:

我正在使用 MVC 的代码优先方法面临以下问题。

我有 1 个 Admin 模型,它有 2 个属性,分别代表一个单独的类,如下所示。

 public class Admin
        { 
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }
            public string Name { get; set; }
            public List<IdProof> IdProofDocs { get; set; }
            public Subscription subscription { get; set; }
         }

    public class IdProof
        { 
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }
            public string File { get; set; }
        }
 

    public class Subscription
        {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }
            public double TotalAmount { get; set; }
            public double PaidAmount { get; set; }
        }

当我尝试保存它时,它成功地将值保存在 3 个表中,包括管理模型的最后 2 个(即 IdProof、Subscription)。见下面代码

 [HttpPost]
            public ActionResult AddHotel(Admin admin)//saving correctly in 3 table i.e. admin, subscription,IdProof
            { 
                dbContext.Admins.Add(admin);
                dbContext.SaveChanges();
                return RedirectToAction("someActionMethod");
            }   

到现在还不错,但是从这里开始

当我尝试使用以下代码获取记录时

 public ActionResult AllAdmins()
        { 
            List<Admin> ListAdmin= dbContext.Admins.ToList();//here its fetching records from admin table only ;(
            return View(ListAdmin);
        }

它只给我 Admin 表数据,而不是其他 2 个表***,即 IdProof 和 Subscription。我想知道 EF 通过其模型自动将数据保存在其他 2 个表中,所以在获取时为什么它没有从其他 2 个表中给我数据。

我在 mvc5 中使用 Code-First 方法,需要在我的代码中进行更改。我是 mvc 新手。

提前致谢

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

如果您希望 EF 为您加载其他表格,则需要包含其他表格。

List<Admin> ListAdmin= dbContext.Admins
    .Include(x => x.IdProofDocs).Include(x => x.Subscription).ToList()

【讨论】:

  • 需要添加命名空间“使用 System.Data.Entity;”
【解决方案2】:

EF 有延迟加载和急切加载的概念。

  1. 延迟加载 在延迟加载 EF 中,在请求之前不会加载相关实体。

链接:https://www.entityframeworktutorial.net/lazyloading-in-entity-framework.aspx

  1. 急切加载 在 Eager Loading 中,使用 Include 方法在查询时提到了相关实体。

链接:https://www.entityframeworktutorial.net/eager-loading-in-entity-framework.aspx

根据需求,您可以选择选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多