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; }
}
}
}
我们有一个项目必须链接到繁重的数据库基础设施(已存在 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; }
}
}
}