2013-03-17 41 views
0

我有以下映射:当EF代码第一次创建它时,是否有方法可以为许多表指定列顺序?

public webpages_RolesMap() 
     { 
      // Primary Key 
      this.HasKey(t => t.RoleId); 

      // Properties 
      this.Property(t => t.RoleName) 
       .IsRequired() 
       .HasMaxLength(256); 

      // Table & Column Mappings 
      this.ToTable("webpages_Roles"); 
      this.Property(t => t.RoleId).HasColumnName("RoleId"); 
      this.Property(t => t.RoleName).HasColumnName("RoleName"); 

      // Relationships 
      this.HasMany(t => t.UserProfiles) 
       .WithMany(t => t.webpages_Roles) 
       .Map(m => 
        { 
         m.ToTable("webpages_UsersInRoles"); 
         m.MapLeftKey("RoleId"); 
         m.MapRightKey("UserId"); 
        }); 

     } 

当我使用代码第一次那么这迫使EF创建webpages_UsersInRoles表看起来像这样:

CREATE TABLE [dbo].[webpages_UsersInRoles](
    [RoleId] [int] NOT NULL, 
    [UserId] [int] NOT NULL, 
PRIMARY KEY CLUSTERED 
(
    [RoleId] ASC, 
    [UserId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

但是微软创建的SimpleMembership类执行插入不指定列名称,它期望第一列是UserID和第二个RoleId。

INSERT INTO webpages_UsersInRoles VALUES (1,3); 

如何使上面的映射创建一个表,其中UserID是第1列,RoleId是第2列?

请注意,我已经尝试添加此:

public partial class UsersInRoles 
{ 
    [Key, Column(Order = 0)] 
    public int UserId { get; set; } 
    [Key, Column(Order = 1)] 
    public int RoleId { get; set; } 

} 

不过是似乎忽略这一点,仍然创造了很多很多,在错误的顺序列名。

回答

0

我认为你必须配置从对方的许多一对多的关系,以更改列的顺序:

// UserProfileMap derived from EntityTypeConfiguration<UserProfile> 
public UserProfileMap() 
{ 
    // ... 
    this.HasMany(t => t.webpages_Roles) 
     .WithMany(t => t.UserProfiles) 
     .Map(m => 
     { 
      m.ToTable("webpages_UsersInRoles"); 
      m.MapLeftKey("UserId"); 
      m.MapRightKey("RoleId"); 
     }); 
} 
相关问题