0

Добрый день,asp.net структура сущности растеряна

Моя программа дает мне столько неприятностей. Это внезапно дает мне ошибку:

Недопустимое имя столбца 'UserProfile_UserId'.

для этого кода:

public ActionResult Index() 
{ 
---> var model = _db.Roles.ToList();  
return View(model); 

Который имеет смысл. Но проблема в том, что i.m даже не использует класс пользовательских профилей. Im использует класс Roles.

Вот мой контроллер:

FSKDb _db = new FSKDb(); 
    // 
    // GET: /Roles/ 

    public ActionResult Index() 
    { 
     var model = _db.Roles.ToList(); 

     return View(model); 
    } 

и вот мой DB Класс:

namespace Attempt3.Models 
{ 
public class FSKDb : DbContext 
{ 
    public FSKDb() : base("name=DefaultConnection") 
    { 
    } 

    public DbSet<UserProfile> UserProfiles { get; set; } 
    public DbSet<Roles> Roles { get; set; } 
} 
} 

Роли Класс:

[Table("webpages_Roles")] 
public class Roles 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int RoleId { get; set; } 
    public string RoleName { get; set; } 
    public string Description { get; set; } 
} 

UserProfile Класс

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string Surname { get; set; } 
    public string ClientCode { get; set; } 
    public ICollection<Roles> UserRoles { get; set; } 
} 

Я не уверен, почему, когда я попытаться найти роли в моем контроллере, что EF пытается выглядеть для пользователя Profiles_UserID

Он должен смотреть только на том, что если я ищу для пользователя, а не роль. и даже таким образом, название coloumn UserProfile UserId просто «UserId», а не «UserProfile_UserId»

Благодаря

+0

Эй, я скопировал весь код fr о твой вопрос, и у меня нет проблем. У вас есть что-то в OnModelCreating или на другой беглой api-части EF? –

+0

Второй вопрос: ваш EF-код генерирует отношения «один ко многим» между пользователем и ролью (у одного пользователя есть много ролей, у одной роли есть один пользователь). Это кажется очень странным. Может быть, вам нужны отношения многие-ко-многим? (у одного пользователя много ролей, у одной роли есть много пользователей). Если это так, вы должны добавить в коллекцию классов ролей UserProfiles. –

+0

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

ответ

0

У вас есть один-ко-многим между UserProfile и Roles. Поэтому каждая Роль связана с одним пользователем, поэтому UserProfile_ID хранится в таблице Роли. Для того, чтобы построить многие-ко-многим вы должны сделать:

  1. Укажите в классе UserProfile, что есть много Roles - сделано вами
  2. Укажите в классе Role, что есть много UserProfiles:

    [Table("webpages_Roles")] 
    public class Roles 
    { 
        [Key] 
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
        public int RoleId { get; set; } 
        public string RoleName { get; set; } 
        public string Description { get; set; } 
        public ICollection<UserProfile> Users { get; set; } 
    } 
    

Да, это все. Теперь EF будет генерировать третью таблицу с именем UserProfileRoles и будет скрывать отношения «один ко многим» между UserProfile и UserProfileRoles, между Role и UserProfileRoles.Если вы хотите изменить имя таблицы, в классе контекста вы должны переопределить OnModelCreating и использовать свободно API для настройки отображения классов для таблиц:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder 
     .Entity<UserProfile>() 
     .HasMany<Roles>(u => u.UserRoles) 
     .WithMany(u => u.Users) 
     .Map(m => { 
      m.ToTable("_myOwnMapTable_UserProfile__Roles"); 
     }); 

    base.OnModelCreating(modelBuilder); 
} 

Ссылки:

  1. Get Started with Entity Framework (EF)
  2. Configuring/Mapping Properties and Types with the Fluent API
  3. Configuring Relationships with the Fluent API
Смежные вопросы