c# - 实体大小对 EF Core 中的性能是否重要,首先使用 DB?
问题描述
我正在编写一个 ASP.NET Core Web API 项目。作为数据源它将使用现有的(并且相当大的)数据库。但不是整个数据库。API 将仅使用一些表,即使在这些表中它也不会使用所有列。
使用逆向工程和脚手架,我能够生成DbContext
实体类......这让我开始思考。有一个包含 30 列(或更多)的表。我正在使用这张表,但我只需要 5 列。
我的问题是: 从 C# 实体对象中删除 25 个未使用的列有什么好处吗?真的有关系吗?
将它们留在那里未使用的好处是,如果有人想要添加需要其中一个的新功能,他不需要去数据库和逆向工程所需的列(已经有)。
删除未使用的好处是......?
编辑:这是示例代码:
public class FooContext : DbContext
{
public FooContext(DbContextOptions<FooContext> options)
: base(options)
{
}
public DbSet<Item> Items { get; set; }
}
[Table("item")]
public class Item
{
[Key]
[Column("itemID", TypeName = "int")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Column("name", TypeName = "varchar(255)")]
public string Name { get; set; }
}
示例用法:
public ItemDto GetItem(int id)
{
var item = _fooContext.Items.Where(i => i.Id == id).FirstOrDefault();
// Here I have item with two fields: Id and Name.
var itemDto = _mapper.Map<ItemDto>(item);
return itemDto;
}
显然我对更复杂的操作很好奇。像...当项目实体被其他实体包含时。例如:
_foo.Warehouse.Include(i => i.Items)
Item
或实体上的其他更复杂的功能
解决方案
您的实体需要匹配数据库中的内容,即您需要一个属性来匹配每一列(忽略任何影子属性)。这里别无选择,否则 EF 会抱怨。
但是,当您实际查询时,您可以通过以下方式仅选择您实际需要的列:
var foos = await _context.Foos
.Select(x => new
{
Bar = x.Bar,
Baz = z.Baz
})
.ToListAsync();
或者,如果您不需要能够插入/更新表,您可以选择使用DbQuery<T>
而不是DbSet<T>
. 使用DbQuery<T>
,您可以使用任何您想要的类,并通过FromSql
.
推荐阅读
- r - 从列表中制作一个矩阵,在 R 中具有某些重复的行和列
- python - 创建 SPS_HOME 环境变量时遇到问题
- apache-spark - 在现有 spark 数据集的开头添加一行
- algorithm - 展平高度图以满足步长要求
- angular - Angular拦截器:仅在第一个返回后才发送请求
- coq - 无法证明非标准递归函数的微不足道的引理
- javascript - Slider Revolution 无法更改文本/按钮颜色
- firefox-addon - Firefox(Hunspell)在拼写检查单词之前如何以及如何清理文本?
- windows - Windows Defender 根据扫描结果创建工作流
- javascript - 使用javascript从字符串中删除时间