Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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# 代码优先EF6不检索内部对象?_C#_Entity Framework_Ef Code First - Fatal编程技术网

C# 代码优先EF6不检索内部对象?

C# 代码优先EF6不检索内部对象?,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,明显的重复是针对ef5的,这是ef6,但我需要的答案是虚拟的(延迟加载),在明显的重复中不存在 我想我已经把代码优先的方法搞砸了 最初,我们首先从数据库中编写代码,一切都很顺利,但是从上一步开始,出现了新的需求,因此我们放弃了该数据库,更新代码以匹配,然后首先使用代码生成一个新的数据库 我们保留了旧项目,只是更改了所有需要更改的内容,并清理了代码,从初始代码中删除了所有自动生成的内容(首先从数据库中删除代码),这样我们就可以先对数据库执行适当的代码 这里的问题是ImageCoordinates类

明显的重复是针对ef5的,这是ef6,但我需要的答案是虚拟的(延迟加载),在明显的重复中不存在

我想我已经把代码优先的方法搞砸了

最初,我们首先从数据库中编写代码,一切都很顺利,但是从上一步开始,出现了新的需求,因此我们放弃了该数据库,更新代码以匹配,然后首先使用代码生成一个新的数据库

我们保留了旧项目,只是更改了所有需要更改的内容,并清理了代码,从初始代码中删除了所有自动生成的内容(首先从数据库中删除代码),这样我们就可以先对数据库执行适当的代码

这里的问题是ImageCoordinates类(我将其简化为两个类和整个代码库)包含一个Imagedata对象,但在代码中,当我检索ImageCoordinates时,它会为Imagedata对象返回null

public class ImageCoordinate
{
    [Key]
    public Guid uid { get; set; }

    [StringLength(50)]
    public string coordinates { get; set; }

    public ImageData ImageData { get; set; }
}

public class ImageData
{
    [Key]
    public Guid uid { get; set; }

    [Column("imageData")]
    public byte[] imageData1 { get; set; }

    [StringLength(50)]
    public string fileName { get; set; }
}
dbContext类包含

public class dbContext : DbContext
{
    public dbContext(string connectionString)
        : base(connectionString)
    {
    }
    public virtual DbSet<ImageCoordinate> ImageCoordinates { get; set; }
    public virtual DbSet<ImageData> ImageDatas { get; set; }
}
在数据库端,自动生成的结构

 uid                                     coordinates    ImageData_uid
AC5712F6-B69B-44FE-A255-3F3227E02802    34,15,158,56    FFE0473D-4CF7-4B26-BE8A-A24FC79B6695

有人能解释一下我在这里做错了什么,以阻止系统生成该链接并检索imageCoordinate的所有数据吗?

因此,要么将关联属性声明为
virtual
以启用延迟加载,要么使用
Include
在物化点加载关联数据

public virtual ImageData ImageData { get; set; }


因此,要么将关联属性声明为
virtual
以启用延迟加载,要么使用
Include
在具体化点加载关联数据

public virtual ImageData ImageData { get; set; }


如果希望导航属性是虚拟的,则需要将其声明为
虚拟的

public class ImageCoordinate
{
   //...
  public virtual ImageData ImageData { get; set; }
}
在本文中,您将找到一个很好的解释,说明如果您希望为实体启用延迟加载,并让实体框架在发生更改时跟踪类中的更改,那么必须遵循的要求


仅供参考,EF有三种加载相关实体的方法:、和。使用最多的是前两个。

如果您想使用导航属性,则需要将它们声明为
virtual

public class ImageCoordinate
{
   //...
  public virtual ImageData ImageData { get; set; }
}
在本文中,您将找到一个很好的解释,说明如果您希望为实体启用延迟加载,并让实体框架在发生更改时跟踪类中的更改,那么必须遵循的要求


仅供参考,EF有三种加载相关实体的方法:、和。最常用的是前两个。

您想要的功能是延迟加载。默认情况下,它处于启用状态。它必须获取使用
virtual
关键字声明的所有子实体。因此,请考虑将此属性更改为<代码>虚拟< /代码> .<
public class ImageCoordinate
{
    ...
    public virtual ImageData ImageData { get; set; }
}
或者您可以使用
Include
,它将加载在查询中声明的子实体。此过程称为“快速加载”

dc.ImageCoordinates
  .Include(x=> x.ImageData)
  .FirstOrDefault(x => x.uid == uid);
此外,您还可以在上下文构造函数中手动启用延迟加载:

public MyEntitiesContext() : base("MyEntitiesContext")
{
    this.ContextOptions.LazyLoadingEnabled = true;
    ...
}

您需要的功能是延迟加载。默认情况下,它处于启用状态。它必须获取使用
virtual
关键字声明的所有子实体。因此,请考虑将此属性更改为<代码>虚拟< /代码> .<
public class ImageCoordinate
{
    ...
    public virtual ImageData ImageData { get; set; }
}
或者您可以使用
Include
,它将加载在查询中声明的子实体。此过程称为“快速加载”

dc.ImageCoordinates
  .Include(x=> x.ImageData)
  .FirstOrDefault(x => x.uid == uid);
此外,您还可以在上下文构造函数中手动启用延迟加载:

public MyEntitiesContext() : base("MyEntitiesContext")
{
    this.ContextOptions.LazyLoadingEnabled = true;
    ...
}

你有我的投票权,我不喜欢看到没有投票权的好答案。当然,我同意斯宾德的答案应该被标记为答案,因为他是第一个回答这个问题的人,但是我们的答案也回答了这个问题,并且他们有自己的答案contributions@octavioccl谢谢)你有我的投票权,我不喜欢看到没有投票权的好答案。当然,我同意斯宾德的答案应该被标记为答案,因为他是第一个回答这个问题的人,但是我们的答案也回答了这个问题,并且他们有自己的答案contributions@octavioccl(谢谢)