次のように定義された2つのエンティティクラスがあります
1) プロジェクトクラス
public class Project
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ProjectId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime CreatedDate { get; set; }
public ICollection<Person> Persons { get; set; }
}
2) 人物クラス
public class Person
{
public Person()
{
Projects = new List<Project>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int PersonId { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; }
public string Designation { get; set; }
public string CellPhone { get; set; }
public ICollection<Project> Projects { get; set; }
}
そして、私の DataContext クラスでは、構成は次のように定義されています
public class DataContext: DbContext
{
public DataContext()
: base("name=DataContext")
{
}
public DbSet<Project> Projects { get; set; }
public DbSet<Person> Persons { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Project>()
.HasMany<Person>(p => p.Persons)
.WithMany(p => p.Projects)
.Map(m =>
{
m.ToTable("ProjectPersons");
m.MapLeftKey("ProjectId");
m.MapRightKey("PersonId");
});
}
}
新しいプロジェクトを作成した後、プロジェクト テーブルと Person テーブルにそのレコードが入力されますが、結合によって作成された ProjectPerson テーブルに ProjectId と PersonId が入力されていないことに気付きました。
何か提案はありますか?
ここに新しいプロジェクトを作成するための私の HttpPost メソッドがあります
[HttpPost]
public ActionResult CreateProject(Projects newProject, int page = 1)
{
_ctx.Projects.AddProject(newProject, ref _ctx);
_ctx.Person.AddPerson(newProject.Person, newProject, ref _ctx);
_ctx.SaveChanges();
var userProjects = _ctx.Projects.GetStaffUserProjects(providerUserKey, page, ref _ctx);
return PartialView("_Projects", userProjects);
}
そして、ここに「AddProject」と「AddPerson」の拡張メソッドがあります
1) プロジェクトの追加
public static void AddProject(this IEnumerable<Project> projects, Projects newProject, ref DataContext ctx)
{
var project = new Project
{
Title = newProject.Title,
Duration = newProject.Duration,
Description = newProject.Description,
CreatedDate = DateTime.Now,
Status = true,
UserId = (int)Membership.GetUser().ProviderUserKey,
ProjectCategoryId = newProject.SelectedProjectCategoryId,
OrganizationId = newProject.SelectedOrganizationId
};
ctx.Projects.Add(project);
}
2) AddPerson
public static void AddPerson(this IEnumerable<Person> persons, Person newPerson, Projects newProject, ref DataContext ctx)
{
var person = new Person
{
Name = newPerson.Name,
EmailAddress = newPerson.EmailAddress,
CellPhone = newPerson.CellPhone,
Designation = newPerson.Designation
};
ctx.Person.Add(person);
}
}