2013-04-03 7 views
2

Я новичок в коде и выведен из контекста БД. Вот отрывок из моей модели.код сначала много-много заданное имя таблицы

[Table("pm_Material")] 
public class Material 
{ 
    public Material() 
    { 
     this.ProductionStepLogs = new HashSet<ProductionStepLog>(); 
    } 

    [Key] 
    public int MaterialId { get; set; } 
    public int MaterialTypeId { get; set; } 
    public string Description { get; set; } 
    public decimal CostRate { get; set; } 

    public virtual MaterialType MaterialType { get; set; } 
    public virtual ICollection<ProductionStepLog> ProductionStepLogs { get; set; } 
} 

[Table("pm_ProductionStepLog")] 
public class ProductionStepLog 
{ 
    public ProductionStepLog() 
    { 
     this.Materials = new HashSet<Material>(); 
    } 

    [Key] 
    public System.Guid ProductionStepLogId { get; set; } 
    public int ProductionStepId { get; set; } 
    public System.Guid ProductId { get; set; } 
    public Nullable<System.DateTime> BeginStep { get; set; } 
    public Nullable<System.DateTime> EndStep { get; set; } 
    public int UserId { get; set; } 

    public virtual Product Product { get; set; } 
    public virtual ProductionStep ProductionStep { get; set; } 
    public virtual ICollection<Material> Materials { get; set; } 
} 

Создание БД работает отлично, но я хочу, чтобы указать имя автоматически созданным многие-ко-многим «таблицы ProductionStepLogMaterials», используя [Table («pm_ProductionStepLogMaterials»)].

Возможно ли это?

+0

только имя ? – NSGaga

+0

Было ли это полезно для вас? – MikroDel

+0

@NSGaga, Да, просто имя. – float

ответ

2

Вы должны переопределить protected override void OnModelCreating(DbModelBuilder modelBuilder) свой собственный класс DbContext так:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{  
    modelBuilder.Entity<Material>() 
    .HasMany(a => a.ProductionStepLog) 
    .WithMany(a => a.Material) 
    .Map(x => 
    { 
     x.ToTable("NameOfYourTable"); 
     x.MapLeftKey("MaterialId"); 
     x.MapRightKey("ProductionStepLogId"); 
    }); 
} 
+0

Не может ли это быть достигнуто и с помощью DataAnnotations? – ecampver

+1

@ e.campver - я думаю, что нет, потому что 'DataAnnotations' является своего рода подмножеством всей функциональности Entity Framework. На сегодняшний день вы можете использовать 'DataAnnotations' для наиболее распространенных сценариев, но не для всех из них – MikroDel

1

AFAIK, это невозможно с аннотациями данных, но можно с конфигурацией беглым API:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<E1Type>() 
      .HasMany(e1 => e1.Collection) 
      .WithMany(e2 => e2.Collection) 
      .Map(config => config.ToTable("MyTable")); 
    } 
+0

upvote за то время, которое вы вложили =) – MikroDel

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