ASP.NET MVC4 で多対多の関係を設定したいと考えています。目標は、ユーザーに属するオブジェクトUserProfile
のリストでデフォルト クラスを拡張することです。は複数のユーザーによって共有される可能性があるため、Timeline
クラスにはオブジェクトのリストも必要です。Timeline
Timeline
UserProfile
タイムライン クラス:
namespace MvcApplication1.Models
{
public class Timeline
{
public int Id { get; set; }
public string Name { get; set; }
public string Color { get; set; }
public List<UserProfile> Users { get; set; }
}
public class TimelineContext : DbContext
{
public DbSet<Timeline> Timelines { get; set; }
public DbSet<UserProfile> UserProfiles { get; set; }
// Added the following because I saw it on:
// http://www.codeproject.com/Tips/548945/Generating-Many-to-Many-Relation-in-MVC4-using-Ent
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Timeline>()
.HasMany(c => c.Users)
.WithMany(s => s.Timelines)
.Map(mc =>
{
mc.ToTable("TimelineOwners");
mc.MapLeftKey("TimelineId");
mc.MapRightKey("UserId");
});
}
}
}
UserProfile クラス (プロパティが追加されたデフォルト クラス):
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Timeline> Timelines { get; set; }
// Added the following because I saw it on:
// http://www.codeproject.com/Tips/548945/Generating-Many-to-Many-Relation-in-MVC4-using-Ent
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<UserProfile>()
.HasMany(c => c.Timelines)
.WithMany(s => s.Users)
.Map (mc =>
{
mc.ToTable("TimelineOwners");
mc.MapLeftKey("UserId");
mc.MapRightKey("TimelineId");
});
}
}
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public List<Timeline> Timelines { get; set; }
}
外部キーを持つ接続テーブルがあります。
のインスタンスを作成する場合Timeline
、Users
リストはnull
次のとおりです。
Timeline timeline = db.Timelines.Find(id); // timeline.Users = null
誰かが私を教えてくれますか?
ASP.NET MVC4 はまったく初めてです。
編集 1: UserProfile を拡張するのではなく、ユーザーを格納する別のクラスを作成する必要があることを理解しています。多対多の関係が機能したら、リファクタリングしてその方向に進みます。しかし、最初に、なぜ機能しないのかを知りたいです。
編集 2: 二重コンテキストも問題を引き起こしました。2 つのコンテキストに対して 2 つのデータベースが作成され、そのうちの 1 つで純粋な結合テーブルが空でした。