ASP.NET MVC - 实体框架Lazing Loading不使用流畅的API从相关类中检索数据

问题描述 投票:0回答:1

我有两个类,具有1对多的关系,但在尝试检索与Support类相关的对象列表时,该列表为空。

public class Support
   {
       public int SupportId { get; set; }
       public string Name { get; set; }
       public string Summary { get; set; } 
       public virtual ICollection<FileDetail> FileDetails { get; set; }     
   }

public class FileDetail
   {
       public Guid Id { get; set; }
       public string FileName { get; set; }
       public string Extension { get; set; }
       public int SupportId { get; set; }
       public virtual Support Support { get; set; } 
   }

我的存储库:

  public abstract class Repository<TEntity> : IRepositoryRead<TEntity>, IRepositoryWrite<TEntity> where 
    TEntity : Entity, new()
{

     public virtual IEnumerable<TEntity> GetAll()
    {
        return Dbset.ToList();
    }

}

我的Fluent API配置

public class FileDetailConfig : EntityTypeConfiguration<FileDetail>
{
    public FileDetailConfig()
    {
        HasKey(c => c.Id);

        Property(c => c.FileName);

        Property(c => c.Extension);

        HasRequired(c =>c.Support )
            .WithMany(c => c.FileDetails )
            .HasForeignKey(c => c.SupportId );


        ToTable("Support");
    }

}

我的控制器

   public ActionResult Index()
    {
        return View(__supportRepository.GetAll());
    }

我的看法:

@foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Summary)
            </td>
            <td>
                @if (item.FileDetails.Count() == 0)
                {
                    <span>No File</span>
                }
                else
                {
                    <span>@item.FileDetails.Count() File(s)</span>
                }
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
                <a href="javascript:void(0);" data-id="@item.Id" class="deleteItem">Delete</a>
            </td>
        </tr>
    }

还尝试在FileDetail类中配置流畅的api,但同样的事情仍然存在。 filedetains列表在视图中返回空

编辑:

那是我的支持表

Support Table

Ands我的FileDetail表:

FileDetain Table

编辑:

我认为问题是查询,看起来查询不是在另一个表中查找相关数据。我只是无法理解为什么

{SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name], [Extent1].[Summary] AS [Summary] FROM [dbo].[Support] AS [Extent1]}
asp.net entity-framework lazy-loading ef-fluent-api
1个回答
0
投票

由于FileDetailsvirtual,我很确定它将是懒惰的。所以它不会在初始查询中。

我不明白这个映射:

HasRequired(c =>c.Support)
            .WithMany(c => c.FileDetails)
            .HasForeignKey(c => c.SupportId)

我没有在您的模型上看到Support属性,您可以将其更改为:

HasMany(c => c.FileDetails).HasForiegnKey(c => c.SupportId);

看看你得到了什么?

你也可以在你的查询中尝试Include(假设你没有调用ToList(),见下文):

return DBset.Include(x => x.FileDetails);

另外,这会将整个表加载到内存中:

return Dbset.ToList();

我强烈建议只返回DBSet,进一步过滤将传递给DB:

return DBset;
© www.soinside.com 2019 - 2024. All rights reserved.