【发布时间】:2014-08-10 14:46:13
【问题描述】:
我需要一些帮助。根据我对项目的想法,我在创建模型时遇到了重大问题。为简化起见,我有一个 Parent 表、一个 Student 表和一个 Address 表。因此,每个家长记录可以有多个学生并且只有一个地址。每个学生记录可以有多个家长,并且只有一个地址。从逻辑上讲,我真的不能假设学生地址与父母地址相同,因为可能有一个学生的父母住在不同的地方。所以,我希望能够有一个学生的地址以及每个家长的地址。所以,我基本上设想这个数据库布局归结为一个地址表,带有地址 ID、街道、城市、州、邮编。然后是一个学生表,带有学生 ID、姓名、地址 ID。然后是带有 ParentID、name、addressID 的 Parent 表。然后是 Parent_Student 参考表,包含 StudentID 和 ParentID。
那么,关于如何实现这一点有什么想法吗?我只用地址信息和 ID 创建了我的地址模型。我使用 ID、姓名、虚拟地址和虚拟 ICollection 父级创建了我的学生模型。然后使用 ID、名称、虚拟地址和虚拟 ICollection 创建了我的父模型。当我尝试通过 New->Scaffolded Item 创建我的 Student 控制器时,我收到一条错误消息,指出 VS 无法确定 Parent 和 Address 类型之间关联的主体端。
我假设这与地址记录对父母或学生有一个外键这一事实有关,但不是两者都有。我对整个代码优先的方法很陌生,所以任何见解都将不胜感激。提前致谢!
编辑:添加更新代码
人物模型:
public enum PersonType
{
Student, Parent, Teacher
}
public abstract class Person
{
[Key]
public int PersonId { get; set; }
[Required]
[StringLength(50,ErrorMessage = "First Name cannot be longer than 50 characters.")]
[Display(Name= "First Name")]
public string FirstName { get; set; }
[StringLength(50, ErrorMessage = "Middle Name cannot be longer than 50 characters.")]
[Display(Name = "Middle Name")]
public string MiddleName { get; set; }
[Required]
[StringLength(50, ErrorMessage = "Last Name cannot be longer than 50 characters.")]
[Display(Name = "Last Name")]
public string LastName { get; set; }
public PersonType personType {get; set;}
public Address Address { get; set; }
[Display(Name = "Full Name")]
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
[Display(Name = "Full Name w Middle")]
public string FullNameWMid
{
get
{
return FirstName + " " + MiddleName + " " + LastName;
}
}
}
学生模型:
public class Student : Person
{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:mm-dd-yyyy}", ApplyFormatInEditMode = true)]
[Display(Name = "Birthday")]
public DateTime Birthday { get; set; }
public ICollection<int> ParentList { get; set; }
public virtual ICollection<Parent> Parents { get; set; }
public virtual Teacher Teacher { get; set; }
}
父模型:
public class Parent : Person
{
public string EmailAddress { get; set; }
public ICollection<int> StudentList { get; set; }
public virtual ICollection<PhoneNumber> PhoneNumbers { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
地址模型:
public class Address
{
public int AddressId { get; set; }
public string StreetLine1 { get; set; }
public string StreetLine2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public Person Person { get; set; }
}
【问题讨论】:
-
您能否将您的实体的代码粘贴到问题中?
-
你可以有两个表,外键引用同一个表。可能是代码有问题,而不是设计问题
标签: c# asp.net-mvc entity-framework-6 foreign-key-relationship