有没有办法强制外键的列名使用 _ID 约定?
Is there a way to force _ID convention for the column name of a foreign key?
我想在前一段时间使用 .net 框架创建的旧数据库上使用新的 .net core 5 winforms,entity framework xaf 应用程序。
在我的数据库中,安全性 table 的外键具有类似 Role_ID 的名称,而新应用程序需要像 RoleId
这样的名称
有没有一种方法可以在不更改控制安全 table 结构的 Dev Express 代码的情况下实现 _ID 约定?
例如,我没有用于 PermissionPolicyMemberPermissionsObject 的 DBSet,因为框架应用程序从来不需要它。
在 OnModelCreating 我有
modelBuilder.Entity<PermissionPolicyMemberPermissionsObject>()
.ToTable("PermissionPolicyMemberPermissionsObjects")
.HasOne<PermissionPolicyTypePermissionObject>().WithMany().HasForeignKey("TypePermissionObject_ID");
但是,如果我允许创建新数据库,table 会创建一个 TypePermissionObject_ID 字段和一个 TypePermissionObjectID 字段。
如果我尝试访问只有 TypePermissionObject_ID 字段的旧数据库,我会收到错误消息,指出缺少 TypePermissionObjectID。
我的目标是 net5.0
<PackageReference Include="DevExpress.ExpressApp" Version="21.2.5" />
<PackageReference Include="DevExpress.ExpressApp.CodeAnalysis" Version="21.2.5" />
<PackageReference Include="DevExpress.ExpressApp.ConditionalAppearance" Version="21.2.5" />
<PackageReference Include="DevExpress.ExpressApp.EFCore" Version="21.2.5" />
<PackageReference Include="DevExpress.ExpressApp.Validation" Version="21.2.5" />
<PackageReference Include="DevExpress.Persistent.Base" Version="21.2.5" />
<PackageReference Include="DevExpress.Persistent.BaseImpl.EFCore" Version="21.2.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.13" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.13" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.13" />
[更新]
在学习 之后,我尝试了
这样的语句
modelBuilder.Entity<PermissionPolicyActionPermissionObject>()
.ToTable("PermissionPolicyActionPermissionObjects")
.HasOne<PermissionPolicyRoleBase>().WithMany().HasForeignKey("RoleID");
但是我不知道如何设置列名。
我尝试添加
modelBuilder.Entity()
.属性("RoleID").HasColumnName("Role_ID");
但这创建了一个名为 RoleID1 的附加字段
以下模式有效。
modelBuilder.Entity<PermissionPolicyActionPermissionObject>()
.ToTable("PermissionPolicyActionPermissionObjects")
.HasOne<PermissionPolicyRoleBase>(x=>x.Role).WithMany(y=>y.ActionPermissions).HasForeignKey("RoleID");
modelBuilder.Entity<PermissionPolicyActionPermissionObject>()
.Property<int?>("RoleID").HasColumnName("Role_ID");
我想在前一段时间使用 .net 框架创建的旧数据库上使用新的 .net core 5 winforms,entity framework xaf 应用程序。
在我的数据库中,安全性 table 的外键具有类似 Role_ID 的名称,而新应用程序需要像 RoleId
这样的名称有没有一种方法可以在不更改控制安全 table 结构的 Dev Express 代码的情况下实现 _ID 约定?
例如,我没有用于 PermissionPolicyMemberPermissionsObject 的 DBSet,因为框架应用程序从来不需要它。
在 OnModelCreating 我有
modelBuilder.Entity<PermissionPolicyMemberPermissionsObject>()
.ToTable("PermissionPolicyMemberPermissionsObjects")
.HasOne<PermissionPolicyTypePermissionObject>().WithMany().HasForeignKey("TypePermissionObject_ID");
但是,如果我允许创建新数据库,table 会创建一个 TypePermissionObject_ID 字段和一个 TypePermissionObjectID 字段。
如果我尝试访问只有 TypePermissionObject_ID 字段的旧数据库,我会收到错误消息,指出缺少 TypePermissionObjectID。
我的目标是 net5.0
<PackageReference Include="DevExpress.ExpressApp" Version="21.2.5" />
<PackageReference Include="DevExpress.ExpressApp.CodeAnalysis" Version="21.2.5" />
<PackageReference Include="DevExpress.ExpressApp.ConditionalAppearance" Version="21.2.5" />
<PackageReference Include="DevExpress.ExpressApp.EFCore" Version="21.2.5" />
<PackageReference Include="DevExpress.ExpressApp.Validation" Version="21.2.5" />
<PackageReference Include="DevExpress.Persistent.Base" Version="21.2.5" />
<PackageReference Include="DevExpress.Persistent.BaseImpl.EFCore" Version="21.2.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.13" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.13" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.13" />
[更新]
在学习
modelBuilder.Entity<PermissionPolicyActionPermissionObject>()
.ToTable("PermissionPolicyActionPermissionObjects")
.HasOne<PermissionPolicyRoleBase>().WithMany().HasForeignKey("RoleID");
但是我不知道如何设置列名。 我尝试添加
modelBuilder.Entity() .属性("RoleID").HasColumnName("Role_ID");
但这创建了一个名为 RoleID1 的附加字段
以下模式有效。
modelBuilder.Entity<PermissionPolicyActionPermissionObject>()
.ToTable("PermissionPolicyActionPermissionObjects")
.HasOne<PermissionPolicyRoleBase>(x=>x.Role).WithMany(y=>y.ActionPermissions).HasForeignKey("RoleID");
modelBuilder.Entity<PermissionPolicyActionPermissionObject>()
.Property<int?>("RoleID").HasColumnName("Role_ID");