实体框架:在模型类中创建没有属性的数据库列
本文关键字:属性 数据库 创建 框架 模型 实体 | 更新日期: 2023-09-27 18:12:41
是否可以通过流畅的映射API告诉实体框架将列添加到特定的表中,而在模型类中没有相应的属性?
是的,我可以通过在迁移中执行SQL脚本来实现这一点,但是我更喜欢在模型配置中而不是在迁移中指定这一点。
我一直在研究这个问题,无可否认,在EF core发布之前没有原生值对象(复杂属性)处理的问题。
Shadow属性是一种指定从该上下文中生成的迁移应该向数据库添加列的方法。具体请看我的例子:
// In DbContext-inheriting class:
protected override void OnModelCreating(ModelBuilder builder)
{
// Ignore the model property that holds my valueobject -
// (a complex type encapsulating geolocation latitude/longitude)
var entityBuilder = builder.Entity<Item>()
.Ignore(n => n.Location);
// Add shadow properties that are appended to the table in the DB
entityBuilder.Property<string>("Latitude");
entityBuilder.Property<string>("Longitude");
base.OnModelCreating(builder);
}
生成迁移表创建语句,如下所示:
migrationBuilder.CreateTable(
name: "Items",
columns: table => new
{
Key = table.Column<string>(nullable: false),
Latitude = table.Column<double>(nullable: false),
Longitude = table.Column<double>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Items", x => x.Key);
});