2015-01-25 3 views
1

У нас есть проект, который должен быть связан с большой инфраструктурой базы данных (10+ лет жизни), на которой множество инструментов еще работает по-разному.Entity Framework: способ переопределить соглашение об именах по всему миру?

Основное программное обеспечение имеет собственную модель условного обозначения для обработки внешних ключей и первичных ключей, к сожалению, немного отличающихся от конвенций EF.

EF: таблица «Курс» имеет ПК под названием «ID» или «CourseID» нас: таблица «Курсы» в множественном и имеет ПК под названием «Нид»

EF: таблица «PlayerInscription» имеет FK назвал «CourseID» к таблице «Курс» US: таблица «PlayerInscriptions» имеет множественное число и имеет FK с именем «nCOURSE_ID» в таблице «Курсы»

Я знаю, что я могу переопределить каждый случай на каждом объекте ключи, но для этого большого проекта он включает в себя множество таблиц, реляционных ключей, и это приводит к очень тяжелой работе и дополнительным обозначениям.

Знаете ли вы, существует ли способ переопределить соглашение EF для целого проекта, чтобы позволить баз данных сначала более «плавно» управлять моделями, чем со всеми аннотациями?

Спасибо!

ответ

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; } 
    } 
} 
} 
+0

Его хорошая отправная точка, спасибо. – iguypouf

Смежные вопросы