Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建从基类继承的MVC5模型类_C#_Entity Framework_Inheritance - Fatal编程技术网

C# 创建从基类继承的MVC5模型类

C# 创建从基类继承的MVC5模型类,c#,entity-framework,inheritance,C#,Entity Framework,Inheritance,我想这是一个非常基本的问题,但我似乎无法让它正常工作。所以,我正在建立一个MVC5项目,使用EF6框架,首先使用模型。为了简化事情,我要说我有4个模型:学生、老师、家长、地址。学生、教师和家长共享相似的字段,所以我想创建一个Person基类从中继承。我这样做没问题,但我的问题是把地址记录和一个人联系起来。我会有一个1:0的关系,从一个人到另一个地址。所以,我的Address类看起来像这样 public class Address { public int ID { get; set;

我想这是一个非常基本的问题,但我似乎无法让它正常工作。所以,我正在建立一个MVC5项目,使用EF6框架,首先使用模型。为了简化事情,我要说我有4个模型:学生、老师、家长、地址。学生、教师和家长共享相似的字段,所以我想创建一个Person基类从中继承。我这样做没问题,但我的问题是把地址记录和一个人联系起来。我会有一个1:0的关系,从一个人到另一个地址。所以,我的Address类看起来像这样

public class Address
{


    public int ID { 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; }

    [Key]
    [ForeignKey("Person")]
    public int PersonID { get; set; }

    public virtual Person person { get; set; }
}
我的个人课看起来像这样

public abstract class Person
{
    public int ID { 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;}

    [Key]
    [ForeignKey("Address")]
    public int AddressID { get; set; }

    public virtual 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 virtual ICollection<Parent> Parents { get; set; }
    public virtual Teacher teacher { get; set; }

}
公共班级学生:人
{
[数据类型(DataType.Date)]
[DisplayFormat(DataFormatString=“{0:mm dd yyyy}”,ApplyFormatInEditMode=true)]
[显示(Name=“生日”)]
公共日期时间生日{get;set;}
公共虚拟ICollection父对象{get;set;}
公共虚拟教师{get;set;}
}
所以,当我尝试为学生创建一个新的控制器时,我的问题就出现了。由于类型地址上的ForeignKey PersonID无效,我收到一个关于无法检索Student元数据的错误。在从属类型地址上找不到导航类型人员

很明显,我在Address中有一个Person导航类型,在Person中有一个Address导航类型,以及AddressID的FK查找。我假设这与PersonID和StudentID有关,因为继承关系。所以,我试着在Address中使用Nav类型的Student,然后在Student中使用地址Nav类型。当我这样做的时候,我得到了与上面相同的关于Person/PersonID的错误。我确信这是我所缺少的一个基本OOO原则,但我希望能得到任何关于我做错了什么的指导


提前谢谢大家

为什么在PersonId上设置
[Key]
,同时还有Address.ID?旧线程,但是:一个人可以有一个地址。一个地址只能有一个人。如果家长和学生住在同一个地址,他们都会指向同一个地址。但是地址怎么办,它只能指向一个人(家长或学生)你真的需要地址才能链接到这个人吗?也许这个场景只适用于您发布的这个示例,只是想知道。