Entity Framework : 一种全局覆盖命名约定的方法?

Entity Framework : a way to override naming convention globally?

我们有一个项目必须链接到繁重的数据库基础设施(已存在 10 年以上),其中有许多工具以各种方式运行。

主要软件有自己的约定模型来处理外键和主键,不幸的是它与 EF 约定有点不同。

EF : table "Course" 有一个名为 "ID" 或 "CourseID" 的 PK 我们:table "Courses" 是复数形式,有一个 PK 名为 "nID"

EF : table "PlayerInscription" 有一个名为 "CourseID" 的 FK 到 table "Course" US : table "PlayerInscriptions" 是复数形式,并且有一个 FK 名为 "nCOURSE_ID" 到 table "Courses"

我知道我可以在每个实体上逐个覆盖键,但是对于这个大项目,它涉及很多 tables,关系键,这会导致非常繁重的工作和额外的符号.

您是否知道是否存在一种方法来覆盖整个项目的 EF 约定,让 databasefirst 比使用所有注释更多地 "fluently" 管理模型?

谢谢!

方法如下:

using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace NamingConventionTest
{
    public class Program
    {
        static void Main(string[] args)
        {
            MyDbContext dbctx = new MyDbContext();
            var c = new Course()
            {
                SomeStringProp = "test",
                SomeIntProp = 1
            };

        dbctx.Set<Course>().Add(c);
        dbctx.SaveChanges();


    }

    public class MyDbContext : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Properties<int>()
                        .Where(p => p.Name.Contains("ID"))
                        .Configure(p => p.IsKey());

            modelBuilder.Conventions.Add(new IdConvention());
        }

        public DbSet<Course> Courses { get; set; }

        public class IdConvention : Convention
        {
            public IdConvention()
            {
                this.Properties<int>()
                    .Where(x => x.Name.Contains("Id"))
                    .Configure(x => x.HasColumnName("asdID"));
            }
        }
    }

    public class Course
    {
        [Key]
        public int Id { get; set; }
        public string SomeStringProp { get; set; }
        public int SomeIntProp { get; set; }
    }
}
}