我们有一个项目必须链接到繁重的数据库基础设施(10年以上的生活),许多工具仍以各种方式运行。
主软件有自己的常规模型来处理外键和主键,不幸的是它与EF约定略有不同。
EF:表“课程”有一个名为“ID”或“CourseID”的PK 我们:表“课程”是多元化的,有一个名为“nID”的PK
EF:表“PlayerInscription”在表“课程”中有一个名为“CourseID”的FK 美国:表格“PlayerInscriptions”是多元化的,并且在表格“Courses”中有一个名为“nCOURSE_ID”的FK
我知道我可以在每个实体上逐个覆盖键,但对于这个大项目,它涉及很多表,关系键,这会产生非常繁重的工作和额外的符号。
您是否知道是否存在覆盖整个项目的EF约定的方法,让databasefirst比所有注释更“流畅”地管理模型?
谢谢!
答案 0 :(得分:1)
以下是:
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; }
}
}
}