当我尝试添加与另一个项目具有一对多关系的项目时,我遇到了错误。我不知道为什么会这样,但这是相关的代码:
public class ResourcesContext : DbContext
{
public MyContext() : base("MyContext")
{
}
public DbSet<UserSupervisor> UserSupervisor { get; set; }
public DbSet<User> User { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<UserSupervisor>().HasKey(t => t.Id).HasMany(t => t.Users);
modelBuilder.Entity<User>().HasKey(i => i.Id).HasRequired(i => i.Tutor);
modelBuilder.Entity<User>().HasMany(u => u.Items);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
public class UserSupervisor
{
private string _emailAddress;
public int Id { get; set; }
public string Name { get; set; }
public string EmailAddress
{
get { return _emailAddress; }
set { _emailAddress = value.Replace("@someemail.address", ""); }
}
public virtual ICollection<User> Users { get; set; }
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int UserNumber { get; set; }
public virtual UserSupervisor Tutor { get; set; }
}
这是我的app.config连接字符串:
<add name="MyContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MyApp;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
我完全难过了。但是,我不知道为什么会这样。有谁知道为什么?
答案 0 :(得分:1)
除非是拼写错误,否则您尝试访问
中用户类上的非现有属性项modelBuilder.Entity<User>().HasMany(u => u.Items);
此外,由于您使用的是代码优先(假设您没有摆弄约定设置),您不必指定键和关系,而是让Convention处理它。通过在您的实体上具有属性int Id,它将自动成为该表的主键。
通过在属于同一DbContext的实体类上具有导航属性,您不必指定关系。因此,Tutor上的用户集合和用户上的Tutor将自动创建关系。您唯一需要指定的是需要Tutor。