Entity Framework 中的外键错误
ForeignKey error in Entity Framework
我正在计划一个简单的两个table结构:
1)老师Table:
public class TeacherAccount
{
[DataType(DataType.Text), Required()]
public string Name { get; set; }
[DataType(DataType.Text), Required()]
public string Address { get; set; }
[DataType(DataType.EmailAddress), Required(), Key]
public string Email { get; set; }
[DataType(DataType.Password), Required()]
public string Password { get; set; }
[DataType(DataType.Password), Compare("Password"), Required(), NotMapped]
public string ConfirmPassword { get; set; }
public bool Activated { get; set; }
}
2) 老师教授的科目:
public class Teacher_Subject_Map
{
[ForeignKey("TeacherAccount")]
public string Email { get; set; }
public string Subjects;
}
我的理念是:
识别老师的email,可以有多个科目,是那个老师教的。
我是怎么得到这个的:
The ForeignKeyAttribute on property 'Email' on type
'xpertsdesk.Models.Teacher_Subject_Map' is not valid. The navigation
property 'TeacherAccount' was not found on the dependent type
'xpertsdesk.Models.Teacher_Subject_Map'. The Name value should be a
valid navigation property name.
作为 mvc5 中的错误。
我正在尝试做什么:
Create table Teacher(Email varchar(30) Primary Key, Other Details);
Create table Subjects(Email varchar(30) References Teacher(Email), Subject varchar(30));
我做错了什么?
如果一个科目只能由一位老师教授(一对多关系):
在这种情况下,不会有映射 table.
public class Subject
{
[Key]
public string Name { get; set; }
// This will hold the Key of Teacher
public string TeacherEmail { get; set; }
[ForeignKey("TeacherEmail")]
public virtual Teacher Teacher { get; set; }
}
public class Teacher
{
/* the original properties comes here, e.g. Email */
public string Email { get; set; }
// Navigation property for taught subjects
public virtual ICollection<Subject> Subjects { get; set; }
}
如果一个学科可以由更多的老师教授(多对多关系):
Subject
class 就是这样。
public class Subject
{
[Key]
public string Name { get; set; }
/* other properties if needed */
public virtual ICollection<Teacher> Teachers { get; set; }
}
然后可以在自己的DbContext中配置多对多关系class:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder
.Entity<Teacher>()
.HasMany(teacher => teacher.Subjects)
.WithMany(subject => subject.Teachers)
.Map(c =>
{
c.ToTable("Teacher_Subject_Map");
c.MapLeftKey("TeacherEmail");
c.MapRightKey("SubjectName");
});
}
我正在计划一个简单的两个table结构:
1)老师Table:
public class TeacherAccount
{
[DataType(DataType.Text), Required()]
public string Name { get; set; }
[DataType(DataType.Text), Required()]
public string Address { get; set; }
[DataType(DataType.EmailAddress), Required(), Key]
public string Email { get; set; }
[DataType(DataType.Password), Required()]
public string Password { get; set; }
[DataType(DataType.Password), Compare("Password"), Required(), NotMapped]
public string ConfirmPassword { get; set; }
public bool Activated { get; set; }
}
2) 老师教授的科目:
public class Teacher_Subject_Map
{
[ForeignKey("TeacherAccount")]
public string Email { get; set; }
public string Subjects;
}
我的理念是: 识别老师的email,可以有多个科目,是那个老师教的。
我是怎么得到这个的:
The ForeignKeyAttribute on property 'Email' on type 'xpertsdesk.Models.Teacher_Subject_Map' is not valid. The navigation property 'TeacherAccount' was not found on the dependent type 'xpertsdesk.Models.Teacher_Subject_Map'. The Name value should be a valid navigation property name.
作为 mvc5 中的错误。
我正在尝试做什么:
Create table Teacher(Email varchar(30) Primary Key, Other Details);
Create table Subjects(Email varchar(30) References Teacher(Email), Subject varchar(30));
我做错了什么?
如果一个科目只能由一位老师教授(一对多关系):
在这种情况下,不会有映射 table.
public class Subject
{
[Key]
public string Name { get; set; }
// This will hold the Key of Teacher
public string TeacherEmail { get; set; }
[ForeignKey("TeacherEmail")]
public virtual Teacher Teacher { get; set; }
}
public class Teacher
{
/* the original properties comes here, e.g. Email */
public string Email { get; set; }
// Navigation property for taught subjects
public virtual ICollection<Subject> Subjects { get; set; }
}
如果一个学科可以由更多的老师教授(多对多关系):
Subject
class 就是这样。
public class Subject
{
[Key]
public string Name { get; set; }
/* other properties if needed */
public virtual ICollection<Teacher> Teachers { get; set; }
}
然后可以在自己的DbContext中配置多对多关系class:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder
.Entity<Teacher>()
.HasMany(teacher => teacher.Subjects)
.WithMany(subject => subject.Teachers)
.Map(c =>
{
c.ToTable("Teacher_Subject_Map");
c.MapLeftKey("TeacherEmail");
c.MapRightKey("SubjectName");
});
}