使用联结表访问EF6 MVC5中的嵌套导航属性多对多关系

时间:2019-01-18 09:27:14

标签: asp.net-mvc entity-framework lambda asp.net-mvc-5 entity-framework-6

我有两个具有多对多关系的表。当我使用Package Manager控制台添加迁移时,创建了一个联结表。我不确定这与我要实现的目标有多相关。

设置如下...

客户可以有很多家庭成员

家庭成员帐户也可以链接到多个客户

我已经像这样建立了模型

家庭帐户模型

public class FamilyAccount
    {
        public FamilyAccount()
        {
            this.Clients = new HashSet<Client>();
        }
        public int Id { get; set; }
        public string firstName { get; set; }
        public string lastName { get; set; }
        public string userName { get; set; }
        public string emailAddress { get; set; }
        public virtual ICollection<Client> Clients { get; set; }

    }

和客户端模型

public class Client
    {
        public Client()
        {
            this.Family = new HashSet<FamilyAccount>();
        }
        public int Id { get; set; }
        public string Title { get; set; }
        public string firstName { get; set; }               
        public string middleNames { get; set; }
        public string lastName { get; set; }
        public virtual ICollection<FamilyAccount> Family { get; set; }

    }

在我的控制器上的create方法上,我传递了新的家庭帐户的模型以及要为其创建帐户的clientId。我试图像这样使用lambda访问属性

public ActionResult Create(FamilyAccount familyAccount, int clientId)
        {
            if (ModelState.IsValid)
            {
                db.FamilyAccounts.Add(familyAccount);
                db.SaveChanges();
                return RedirectToAction("Index", new { Id = familyAccount.Clients.Id});
            }

            return View(familyAccount);
        }

在上下文文件中,我进行了以下设置

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Client>()
                .HasMany(c => c.Family).WithMany(i => i.Clients)
                .Map(t => t.MapLeftKey("Client_Id")
                    .MapRightKey("FamilyAccount_Id")
                    .ToTable("FamilyAccountClients"));
        }

无论出于何种原因,我都无法访问familyAccounts.Clients的属性,因此无法使用familyAccounts.Clients.Id

如果有人能让我知道我要去哪里错了,我将不胜感激

0 个答案:

没有答案