【发布时间】:2016-04-08 02:38:33
【问题描述】:
我正在尝试将实体属性映射到数据库列名称,同时将实体保存在 DbContext 中,但我不知道如何在 EF7 中执行此操作。
在使用迁移生成数据库架构后,列名并不总是与对象中的属性名相同。 例如,下面的对象架构:
public class Document
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public User Author { get; set; }
}
在数据库中会有 Id、Name 和 AuthorId 列。
接下来,当我遍历 EntityEntry 属性时,它包含 Id、Name 和 AthorId 列。我可以轻松地映射 Id 和 Name。
我正在寻找的是如何确定 EntityEntry 中的“AuthorId”映射到 Document 中的 Author 字段?
背景:我正在实现通用对象版本历史记录机制,该机制将从 EntityEntries 获取修改的列(来自 SaveChanges 中的 ChangeTracker () in DbContext) 并保存适当的列和它的新值。接下来,在恢复对象时,它应该能够将这些更改映射到适当的实体字段。
我为 EF6 Where does Entity Framework store the mapping between property names and the columns it selects in SQL? 找到了类似的问题,但它非常复杂,并且使用了 EF6 特有的类。
【问题讨论】:
-
Author字段不是简单的对象/基元,因此被视为导航属性(IE:存在于另一个表中的对象的 ID)。默认情况下,EF7 会将“Id”添加到导航属性的名称中,并将其存储为int。
标签: c# entity-framework entity-framework-core