首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不使用现有数据库的EF核心外键

不使用现有数据库的EF核心外键
EN

Stack Overflow用户
提问于 2018-09-01 07:14:09
回答 1查看 5.4K关注 0票数 1

我正在构建一个NET应用程序,它使用现有的MS数据库。主键和外键已在数据库级别上建立并正确工作。

我学习了这篇文章中的示例,并使用包管理器控制台从数据库反向工程模型和数据库上下文。这似乎很管用。它导致将所有模型添加到我的应用程序的models文件夹中,包括一个健壮的数据库上下文类。我遇到的问题是,关于这些实体的关系信息在运行时没有被填充。对于相关实体,在数据库中和由脚手架过程生成的fluent API代码中都建立了外键,我得到了空值。

我有两个表,模式和子模式,这是通过外键相关。

脚手架为上述两个表生成了这两个类:

代码语言:javascript
运行
AI代码解释
复制
public partial class Submode
{
    public Submode()
    {
        Contact = new HashSet<Contact>();
    }

    public int Id { get; set; }
    public int ModeId { get; set; }
    public string Code { get; set; }
    public bool Visible { get; set; }
    public bool IsDefault { get; set; }

    public Mode Mode { get; set; }
    public ICollection<Contact> Contact { get; set; }
}

public partial class Mode
{
    public Mode()
    {
        Contact = new HashSet<Contact>();
        Submode = new HashSet<Submode>();
    }

    public int Id { get; set; }
    public string Code { get; set; }
    public bool Visible { get; set; }
    public bool IsDefault { get; set; }

    public ICollection<Contact> Contact { get; set; }
    public ICollection<Submode> Submode { get; set; }
}

脚手架还在数据库上下文中生成了这个fluent API片段:

代码语言:javascript
运行
AI代码解释
复制
            modelBuilder.Entity<Submode>(entity =>
        {
            entity.HasIndex(e => e.Code)
                .HasName("UQ__Submode__A25C5AA75D2A9AE7")
                .IsUnique();

            entity.Property(e => e.Code)
                .IsRequired()
                .HasMaxLength(100)
                .IsUnicode(false);

            entity.HasOne(d => d.Mode)
                .WithMany(p => p.Submode)
                .HasForeignKey(d => d.ModeId)
                .OnDelete(DeleteBehavior.ClientSetNull)
                .HasConstraintName("FK_Submode_ModeId");
        });

我所读过的关于使用fluent API设置外键的每个示例都显示了类似于上述片段的模式。但是对Submode来说,Mode返回为null。

在运行时为空

我在返回的视图中得到一个空引用异常,因为我试图显示相关的Mode对象的属性。我是缺少了一些配置,还是脚手架代码有问题?

UDPATE --根据请求,下面是从数据库上下文中获取数据的实现。

代码语言:javascript
运行
AI代码解释
复制
public class SQLSubModeData : ISubModeData
{
    private w4lkrContext _context;

    public SQLSubModeData(w4lkrContext context)
    {
        _context = context;
    }

    public IQueryable<Submode> Get()
    {
        return _context.Submode.OrderBy(p => p.Id);
    }

    public Submode Get(int id)
    {
        return _context.Submode.FirstOrDefault(p => p.Id == id);
    }
}

更新(解决)-启用延迟加载解决了问题。三步让我到了那里:

  1. 通过Microsoft.EntityFrameworkCore.Proxies(2.1.2)通过NuGet安装
  2. 更新的Startup.cs -> AddDbContext()方法如下: options.UseLazyLoadingProxies().UseSqlServer(_configuration.GetConnectionString("W4LKR")));services.AddDbContext(options => =>)
  3. 使所有导航属性变为虚拟。这必须在应用程序中的每一个模型上完成,而不仅仅是在我上面的例子中被调用的模型。即使遗漏了一个错误,也会引发错误。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-01 09:03:01

但是对Submode来说,Mode返回为null。

因为您的导航属性没有声明为virtual,所以您已经禁用了延迟加载,因此EF只会在您进行紧急加载或显式加载时填充您的导航属性。

请参阅加载相关数据

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52129455

复制
相关文章
在gpu上运行Pandas和sklearn
当涉及大量数据时,Pandas 可以有效地处理数据。但是它使用CPU 进行计算操作。该过程可以通过并行处理加快,但处理大量数据仍然效率不高。
deephub
2022/11/11
1.7K0
在gpu上运行Pandas和sklearn
ParallelX在GPU上运行Hadoop任务
在面对大规模计算密集型算法时,MapReduce范式的表现并不总是很理想。为了解决其瓶颈,一支小型创业团队构建了名为ParallelX的产品——它将通过利用GPU的运算能力,为Hadoop任务带来显著的提升。 ParallelX的联合创始人Tony Diepenbrock表示,这是一个“GPU编译器,它能够把用户使用Java编写的代码转化为OpenCL,并在亚马逊AWS GPU云上运行”。它的最终产品是一项与亚马逊Elastic MapReduce类似的服务,只不过不同之处在于它将利用EC2 GPU实例类型
GPUS Lady
2018/03/30
1.2K0
在Hadoop上运行Python脚本
之前已经配置好了Hadoop以及Yarn,可那只是第一步。下面还要在上面运行各种程序,这才是最重要的。
py3study
2020/01/06
4.3K0
在 RK3399 上运行开源的 mali GPU 驱动
偶尔会听到有嵌入式 Linux 玩家抱怨自己的开发板:图形界面不够流畅,拖动窗口有卡顿感。
HackforFun
2020/01/13
21.8K6
在 RK3399 上运行开源的 mali GPU 驱动
如果我在 Linux 上运行“sudo rm -rf /”会发生什么?
Linux 文件系统的工作方式与 Windows 系统不同,与将文件和配置存储在 、 或 Drive 中的 Windows 不同C:,D:LinuxE:将所有内容存储在根目录 (/)中。
网络技术联盟站
2022/06/21
2.6K0
如果我在 Linux 上运行“sudo rm -rf /”会发生什么?
在 Mac M1 的 GPU 上运行Stable-Diffusion
Stable Diffusion 是开源的,所以任何人都可以运行和修改它。这就是其在开源之后引发了大量创作热潮的原因。
点火三周
2022/10/18
7.8K2
在 Mac M1 的 GPU 上运行Stable-Diffusion
在QEMU上运行OPTEE
TEE越来越成为一种基础的安全技术,optee作为一种优秀的开源TEE OS正吸引了越来越多的厂商,越来越多的学习者,安智客之前也多次介绍过
安智客
2018/07/30
2.6K0
在QEMU上运行OPTEE
Keras学习笔记(六)——如何在 GPU 上运行 Keras?以及如何在多 GPU 上运行 Keras 模型?,Keras会不会自动使用GPU?
如果你以 TensorFlow 或 CNTK 后端运行,只要检测到任何可用的 GPU,那么代码将自动在 GPU 上运行。
种花家的奋斗兔
2020/11/13
3.2K0
在kubernetes上运行WASM负载
WASM一般用在前端业务中,但目前有扩展到后端服务的趋势。本文使用Krustlet 将WASM服务部署到kubernetes。
charlieroro
2021/05/10
1.5K0
在kubernetes上运行WASM负载
在OS X上运行Docker
本文介绍了如何在OS X上运行Docker,通过使用boot2docker和VirtualBox,使基于Linux的Docker能在OS X上正常运行。同时,还探讨了如何将现有的基于Linux的Docker容器迁移到基于macOS的Docker。
Techeek
2018/01/04
1.9K0
在OS X上运行Docker
在Android系统上运行frp
一时兴起,想在Android上跑一下frpc,本来以为需要在PC上交叉编译后放到机器上才行,后来发现好像更简单,Android YYDS!
老高的技术博客
2022/12/28
4.3K0
在Android系统上运行frp
Powershell运行脚本报错:此系统上禁止运行脚本
当在powershell运行脚本的时候,报错“此系统上禁止运行脚本” 使用 set-executionpolicy remotesigned 执行策略更改 执行策略可以防止您执行不信任的脚本。更改执行
治电小白菜
2020/08/25
1.5K0
GPU底层优化 | 如何让Transformer在GPU上跑得更快?
图 4:Beam Search Decoding (Decoder + Beam Search) 流程图
计算机视觉研究院
2021/02/24
1.8K0
GPU底层优化 | 如何让Transformer在GPU上跑得更快?
检查高 CPU 进程在 Linux 上运行时间的脚本
给 long-running-cpu-proc.sh 设置可执行的 Linux 文件权限。
用户4988085
2021/09/15
2.1K0
在Docker上运行Django和Vue
在Docker上运行Django和Vue Run Django and Vue on Docker Django Dockerfile 生成django项目依赖包. Generate Django project dependencies. pip freeze > requirements.txt 编写django启动脚本 run.sh Write a Django startup script run.sh python3 manage.py runserver 0.0.0.0:8000 编写 D
葫芦
2021/09/08
1.4K0
在Docker上运行Django和Vue
Spacebuilder在Mono上运行修改备忘
Spacebuilder 是一个asp.net mvc3项目,使用到了Combres,Combres依赖于dotless,然后在Spacebuilder的项目没有见到的dotless,运行要求dotless 1.3.0.2版本,通过Nuget获取: Install-Package dotless -Version 1.3.0.2 修改web.config加入dotless配置: <configuration>   <configSections>     <section name="combr
张善友
2018/01/29
1.2K0
Spacebuilder在Mono上运行修改备忘
在 FPGA 上运行 eBPF XDP 应用
这篇文章是对 OSDI20 的 Best Paper hXDP: Efficient Software Packet Processing on FPGA NICs 的阅读笔记,感兴趣的同学可以点击阅读原文查看论文的 paper,slide 和 video。
Oilbeater
2021/10/20
1.3K0
在Windows上使用Docker运行.NetCore
今天我们来说下如何在windows下使用docker运行.net core,既然是docker,那么我们首先得在windows上安装docker。
小世界的野孩子
2019/09/11
4.3K0
在Windows上使用Docker运行.NetCore
在Windows上如何后台运行JuiceFS
JuiceFS的Badger引擎改造完成以后,需要在Windows下面进行后台运行。因为现有的JuiceFS中还没有在Windows下的后台运行实现,所以需要通过其他途径解决。
用户1260683
2022/03/30
2.9K0
在Windows上如何后台运行JuiceFS
点击加载更多

相似问题

独立gpu tensorlfow脚本在独立的gpu上运行

159

GPU上的训练速度超时变慢

13

在GPU上运行MATLAB图像处理脚本

123

GPU渲染到球体上

33

OpenGL,在gpu上测量渲染时间

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文