0

良い一日、

私のプログラムは私に多くの問題を引き起こしています。突然エラーが発生します:

列名 'UserProfile_UserId' が無効です。

このコードの場合:

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

これは理にかなっています。しかし、問題は、ユーザー プロファイル クラスを使用していないことです。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 が User Profiles_UserID を探しようとしている理由がわかりません

ロールではなくユーザーを探している場合にのみ、それを探す必要があります。それでも、UserProfile UserId列名は「UserId」であり、「UserProfile_UserId」ではありません

ありがとう

4

1 に答える 1

0

と の間には 1 対多の関係がUserProfileありRolesます。したがって、各ロールは 1 人のユーザーに関連付けられているため、UserProfile_ID は Roles テーブルに格納されます。多対多の関係を構築するには、次のことを行う必要があります。

  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 は という名前の 3 番目のテーブルを生成し、と、と の間にUserProfileRoles非表示の 1 対多の関係を作成します。テーブル名を変更する場合は、コンテキストのクラスで、流暢な API をオーバーライドして使用し、テーブルへのクラスのマッピングを構成する必要があります。UserProfileUserProfileRolesRoleUserProfileRolesOnModelCreating

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. Entity Framework (EF) を使ってみる
  2. Fluent API を使用したプロパティとタイプの構成/マッピング
  3. Fluent API を使用した関係の構成
于 2013-07-04T13:08:53.493 に答える