2013-09-09 9 views
1

Классы:EF Code Сначала укажите таблицу отношений?

public class Action 
{ 
    public long ID{ get; set; } 
    public string Name{ get; set; } 

    public virtual ICollection<User> Users{ get; set; } 
} 


public class User 
{ 
    public long ID{ get; set; } 
    public string Name{ get; set; } 

    public virtual ICollection<Action> Actions{ get; set; } 
} 

Таблицы:

Actions 
| ID | Name | 

Users 
|ID | Name | 

ActionUsers 
| Action_ID | User_ID | 

Обратите внимание, что Action и User имеет много-ко-многим.

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

  • переименовать таблицу ActionUsers в Permissions
  • член переименованы Action класса, Users к PermittedUsers
  • переименования членом User класса, Actions к Permissions

Как бы сказать EF, чтобы использовать Permissions как таблицу отношений вместо ActionUsers при сопоставлении User.Permissions и Action.PermittedUsers? Могу ли я достичь желаемой конфигурации без использования Fluent API?

ответ

2

Использование Fluent API:

public class Action 
{ 
    public long ID{ get; set; } 
    public string Name{ get; set; } 

    public virtual ICollection<User> PermittedUsers{ get; set; } 
} 


public class User 
{ 
    public long ID{ get; set; } 
    public string Name{ get; set; } 

    public virtual ICollection<Action> Permissions{ get; set; } 
} 

вы можете просто переопределить OnModelCreating метод:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Entity<Action>(). 
     HasMany(c => c.PermittedUsers). 
     WithMany(p => p.Permissions). 
     Map(
     m => 
     { 
     m.MapLeftKey("Action_ID"); 
     m.MapRightKey("User_ID"); 
     m.ToTable("Permissions"); 
     }); 
    } 

, если вы хотите иметь собственное соглашение об именовании вы можете определить Permission таблицу как класс:

public class Permissions 
{ 

    [ForeignKey("Action")] 
    public int Action_ID { get; set; } 
    public Action Action { get; set; } 


    [ForeignKey("User")] 
    public int User_ID { get; set; } 
    public User User { get; set; } 
} 

// context 
public class MyContext : DbContext 
{ 
    public DbSet<Action> Actions { get; set; } 
    public DbSet<User> Users { get; set; } 
    public DbSet<Permissions> Permissions { get; set; } 
} 
+1

Это то, что я сделал, есть ли способ, которым я могу достичь этого, не используя Fluent API? – dpp

+0

Вы пробовали это с помощью 'DataAnnotations'? –

+0

Это моя проблема, я не знаю DataAnnotations в этом случае. :) Возможно ли это тогда? Надеюсь, вы сможете перевести коды в DataAnnotations, это было бы хорошим введением для меня. – dpp