我已经按照教程,但似乎无法让这个工作。我想要实现的是我有一个客户端模型,它有一个所有者处理客户端。该所有者是任何ApplicationUsers。现在这是我遇到的问题:
不支持每种类型的多个对象集。对象集 'ApplicationUsers'和'Users'都可以包含类型的实例 'MyApp.Models.ApplicationUser'。
这是客户端模型。我在那里添加了ApplicationUserId,以便更容易直接使用它。
public class Client
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
// Who does this client belong to
public virtual ApplicationUser User { get; set; }
public string ApplicationUserId { get; set; }
}
我可以使用脚手架为客户端添加新的控制器和视图。它甚至构建没有任何问题,但是当我运行站点时,我得到每个类型的多个对象集错误。
Scaffolding还将Clients添加到ApplicationDbContext(在IdentityModels.cs中设置)。在VS自动生成它们之后,我没有触及任何身份文件,因此我不相信它们存在问题。
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public System.Data.Entity.DbSet<MyApp.Models.Client> Clients { get; set; }
}
导致每种类型的多个对象集不受支持的原因是什么?我花了好几个小时试图解决这个问题。感谢。
答案 0 :(得分:0)
我发现了很多建议如何解决这个问题,它们可能适用于某些情况,但至少对于我在Visual Studio 2015中的项目而言,问题是脚手架做得不好而且生成的控制器而不是使用我在客户端模型中定义的“用户”,代码具有“ApplicationUsers”,我猜这会导致冲突。我通过改变控制器代码解决了这个问题。
ViewBag.ApplicationUserId = new SelectList(db.ApplicationUsers, "Id", "Email", client.ApplicationUserId);
到
ViewBag.ApplicationUserId = new SelectList(db.Users, "Id", "Email", client.ApplicationUserId);
控制器中的所有内容基本上都应该是 db.Users ,而不是自动生成的 db.ApplicationUsers 。
还要确保IdentityModels.cs中的ApplicationDbContext不包含其他Users或ApplicationUsers DbSets。他们不应该在那里。我没有遇到这个问题,但我猜VS2013的人已经看到了这种情况。