将Id映射到EF5.0中数据表中的ClassName+Id字段
Map Id to ClassName+Id field in the datatable in EF5.0
有一个 EFCore-5.0 应用程序,我尝试将 Foo
的 class Id
属性 映射到数据库中的 FooId
字段名称.
我尝试(遵循 this 旧的 link)将其映射到我的 OnModelCreating
的 DbContext
modelBuilder.Properties()
.Where(p => p.Name == "Id")
.Configure(p => p.IsKey().HasColumnName(p.ClrPropertyInfo.ReflectedType.Name + "Id"));
然而它告诉我
Error CS1061 'ModelBuilder' does not contain a definition for
'Properties' and no accessible extension method 'Properties' accepting
a first argument of type 'ModelBuilder' could be found (are you
missing a using directive or an assembly reference?)
您提到的 link 中使用的 ModelBuilder.Properties()
来自 Entity Framework 6,不适用于 EF Core。我相信这是你问题的症结所在。
您可以参考:, , and EF Core 2.0 OwnsOne column prefix
正如@Patrick Xavier Silerio 所说,您所做的是在 EF 中使用的,而不是 EF Core。
在 EF Core 中,您需要使用 Data Annotation 或 Fluent API 配置列名称:
数据注释:
public class Foo
{
[Column("FooId")]
public int Id{ get; set; }
}
流利API:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>()
.Property(b => b.Id)
.HasColumnName("FooId");
}
参考:
如果你想把所有的Id
改成ClassName+Id
,像下面这样改:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
modelBuilder.Entity(entity.Name)
.Property("Id").HasColumnName(entity.GetTableName()+"Id");
}
}
有一个 EFCore-5.0 应用程序,我尝试将 Foo
的 class Id
属性 映射到数据库中的 FooId
字段名称.
我尝试(遵循 this 旧的 link)将其映射到我的 OnModelCreating
的 DbContext
modelBuilder.Properties()
.Where(p => p.Name == "Id")
.Configure(p => p.IsKey().HasColumnName(p.ClrPropertyInfo.ReflectedType.Name + "Id"));
然而它告诉我
Error CS1061 'ModelBuilder' does not contain a definition for 'Properties' and no accessible extension method 'Properties' accepting a first argument of type 'ModelBuilder' could be found (are you missing a using directive or an assembly reference?)
ModelBuilder.Properties()
来自 Entity Framework 6,不适用于 EF Core。我相信这是你问题的症结所在。
您可以参考:
正如@Patrick Xavier Silerio 所说,您所做的是在 EF 中使用的,而不是 EF Core。
在 EF Core 中,您需要使用 Data Annotation 或 Fluent API 配置列名称:
数据注释:
public class Foo
{
[Column("FooId")]
public int Id{ get; set; }
}
流利API:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>()
.Property(b => b.Id)
.HasColumnName("FooId");
}
参考:
如果你想把所有的Id
改成ClassName+Id
,像下面这样改:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
modelBuilder.Entity(entity.Name)
.Property("Id").HasColumnName(entity.GetTableName()+"Id");
}
}