首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在实体框架核心6- C#中延迟加载二进制属性C#

如何在实体框架核心6- C#中延迟加载二进制属性C#
EN

Stack Overflow用户
提问于 2022-01-12 09:13:29
回答 1查看 454关注 0票数 5

我有一个简单的表,包含键、名称和二进制内容。我只需要在需要的时候加载二进制内容。这过去在Linq2Sql中非常简单,但是在EF核心6中,除了延迟加载导航集合之外,我找不到任何东西,这不是我所需要的。我漏掉了什么吗?或者这是EF核心的缺失?伊日

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Content {
 public int Id { get; set; }
 public string Name { get; set; }
 public byte[] Data { get; set; } // How to delay loading this ? 
}

命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ctx.Content.Select(x =x.Id==1);

预期SQL为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT Id, Name FROM Content WHERE Id=1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-12 10:33:28

可选加载某些内容的唯一方法是使用导航属性。

在您的情况下,解决方案是假实体,只包含byte[]属性,并配置为表分裂,以便与主实体共享同一个表。

请注意,这只是逻辑分离,不需要更改DB模式。表中拆分文档的第一行内容如下:

EF允许将两个或多个实体映射到一行。这被称为表拆分或表共享。

也许你和“分裂”这个词混淆了。它不是拆分数据库中的物理表,而是在多个实体之间分割(共享)它。

例如:

模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Content
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ContentData Data { get; set; }
}

public class ContentData
{
    public byte[] Data { get; set; }
}

配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
modelBuilder.Entity<ContentData>()
    .ToTable("Content"); // must be the same as for Content entity
modelBuilder.Entity<ContentData>()
    .Property<int>("ContentId");
modelBuilder.Entity<ContentData>()
    .HasKey("ContentId");

modelBuilder.Entity<Content>()
    .HasOne(e => e.ContentData)
    .WithOne()
    .HasForeignKey<ContentData>("ContentId");

现在Content.Data不会自动加载,您可以在需要时使用通常的Include来加载它。唯一的缺点是一个额外的对象实例和实际的byte[]属性访问器-- content.Data.Data与原始content.Data

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

https://stackoverflow.com/questions/70685674

复制
相关文章
C#中的属性
属性在C#中很常用,但有部分开发人员对它既熟悉又陌生。概念上属性是将元数据关联到元素的方式。属性的使用方法我们在代码中经常肩见到,比如下面这样的:
喵叔
2021/12/22
1.8K0
C#如何获取实体类属性名和值?
这里在数据初始化赋值后在控制台打印输出,调用了getProperties这个方法,
用户9127601
2022/06/09
2.1K0
C# 枚举在属性中运用
//默认ZFLText属性值为"Label"  [DefaultValue(typeof(DisplayMode), "Label")]  public DisplayMode ZFLText   {       get;       set;   } [Serializable]     public enum DisplayMode     {         /// <summary>         /// 显示文本         /// </summary>         Label,   
跟着阿笨一起玩NET
2018/09/18
2.3K0
C# 枚举在属性中运用
C#中Dock属性的作用[通俗易懂]
当在C#项目开发中,在窗体界面的设置经常用到Dock属性值。这里一panel面板的Dock属性值为例描述其作用。
全栈程序员站长
2022/10/01
1.2K0
C#中Dock属性的作用[通俗易懂]
C# 附加属性
附加属性我们早就使用过,常见的用于控件定位的Grid.Row,Grid.Column就是附加属性,那这个东西具体是什么意思呢?请设想这样的情景:一个学生,他在社团可以是社长,他在班内可以是班长,在赛场又可以是运动员,这些特定的属性,并不是每个学生都具有的,只有学生参与了或者在某个环境中,才具有这样的属性。那我们在定义学生类时,就不能把这些属性定义进去,为了解决这种在某些环境中才具有特定属性的情况,WPF引入了附加属性,附加属性就是一个对象可以被它外部的环境附加某些属性,而对象本身实际上不具有这样的属性。
zls365
2021/09/02
1.2K0
C# 附加属性
C#中的方括号[](特性、属性)
首先要说的是,可能一些刚接触C#的朋友常常容易把属性(Property)跟特性(Attribute)弄混淆,其实这是两种不同的东西。属性就是面向对象思想里所说的封装在类里面的数据字段,其形式为:
vv彭
2020/12/28
7.8K0
C#中的方括号[](特性、属性)
C#中的类、方法和属性
这节讲C#中的类,方法,属性。这是面向对象编程中,我们最直接打交道的三个结构。
宿春磊Charles
2022/03/29
2K0
C#中的类、方法和属性
c# Winform 加载窗体
先来一个加载窗体代码 1 public partial class FrmLoading : Form 2 { 3 public BackgroundWorker updateDBWorker=new BackgroundWorker(); 4 5 public Action BackgroundWorkAction 6 { 7 get; 8 set; 9 } 10
冰封一夏
2019/09/10
1.5K0
C#中的反射Reflection动态加载引用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
1.5K0
【MyBatis框架点滴】——MyBatis延迟加载
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51590638
DannyHoo
2018/09/13
4140
【MyBatis框架点滴】——MyBatis延迟加载
C# winform DataGridView 常见属性
C# winform DataGridView 属性说明 ① 取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行的用户删除操作的自定义 ⑥ 行、列的隐藏和删除 ⑦ 禁止列或者行的Resize ⑧ 列宽和行高以及列头的高度和行头的宽度的自动调整 ⑨ 冻结列或行 ⑩ 列顺序的调整 ⑪ 行头列头的单元格 ⑫ 剪切板的操作 ⑬ 单元格的ToolTip的设置 ⑭ 右键菜单(ContextMenuStrip)的设置 ⑮ 单元格的边框、 网格线样式的设定 ⑯ 单元格表示值的设定 ⑰ 用户输入时,单元格输入值的设定 ⑱ 设定新加行的默认值
全栈程序员站长
2022/09/07
3.9K0
C# devExpress BandedGridView属性 备忘
BandedGridView属性备忘 StringBuilder sb = new StringBuilder(); DevExpress.XtraGrid.Views.BandedGrid.BandedGridView view = bandedGridView1 as DevExpress.XtraGrid.Views.BandedGrid.BandedGridView; List<GridBand> gridBand = new List<GridBan
乔达摩@嘿
2020/09/11
1.3K0
C# 动态加载卸载 DLL
我最近做的软件,需要检测dll或exe是否混淆,需要反射获得类名,这时发现,C#可以加载DLL,但不能卸载DLL。于是在网上找到一个方法,可以动态加载DLL,不使用时可以卸载。
林德熙
2022/08/04
1.6K0
C# 动态加载卸载 DLL
我最近做的软件,需要检测dll或exe是否混淆,需要反射获得类名,这时发现,C#可以加载DLL,但不能卸载DLL。于是在网上找到一个方法,可以动态加载DLL,不使用时可以卸载。
林德熙
2018/09/18
2K0
.NET Core 3.0 中的新变化
.NET Core 3.0 是 .NET Core 平台的下一主要版本。本文回顾了 .Net Core 发展历史,并展示了它是如何从基本支持 Web 和数据工作负载的版本 1,发展成为能够运行 Web、桌面、机器学习、容器、IoT 等的版本 3.0。
心莱科技雪雁
2019/04/22
4.9K0
.NET Core 3.0 中的新变化
c# 常用框架整理
Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型 等)和Json的转换。
用户9127601
2021/11/01
5K0
C#的Button.DialogResult属性[通俗易懂]
如果此属性的DialogResult不是设置为None,并且父窗体是通过ShowDialog方法显示的,则不必挂钩任何事件,单击按钮也可关闭父窗体。然后,该窗体的DialogResult属性将设置为该按钮被单击时的DialogResult。
全栈程序员站长
2022/06/25
9680
c#属性一点疑问
public class A     {         //定义一个b属性         public B b         {             get             {                 return new B();  //每次get均调用             }         }         //public B b = new B();   只调用一次     } 如果 A a=new A();  a.b每次访问,B的创建次数不一样的。 最近看几个地
申君健
2018/09/21
3280
C#类特性和属性特性
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication6 { /// <summary> /// AttributeTargets.Class可以对类应用属性 /// Inherited能否由派生类或重写成员继承
liulun
2022/05/09
5280
C# 通过遍历设置控件属性
foreach (Control control in this.Controls) { if (control is Button)
zls365
2020/08/19
1.2K0
C# 通过遍历设置控件属性

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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