Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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# 如何在.net教程中使用抽象模型和具体模型?_C#_Asp.net_.net - Fatal编程技术网

C# 如何在.net教程中使用抽象模型和具体模型?

C# 如何在.net教程中使用抽象模型和具体模型?,c#,asp.net,.net,C#,Asp.net,.net,我正在跟踪,在将模型中的Person实体设置为abstract后,我得到以下错误: 无法将概念侧中的类型“SchoolModel.Person”映射到 在对象端键入“ContosoUniversity2.DAL.Person”。两者 类型必须是抽象类型,或者两者都必须是具体类型 我认为我需要更改Person.cs并将其抽象化。 更改文件后,我再次运行并获得: 找不到“SchoolModel.Student”的CLR类型 我正在使用Visual Studio 2012。有没有办法解决这个问题 Pe

我正在跟踪,在将模型中的
Person
实体设置为
abstract
后,我得到以下错误:

无法将概念侧中的类型“SchoolModel.Person”映射到 在对象端键入“ContosoUniversity2.DAL.Person”。两者 类型必须是抽象类型,或者两者都必须是具体类型

我认为我需要更改
Person.cs
并将其抽象化。 更改文件后,我再次运行并获得:

找不到“SchoolModel.Student”的CLR类型

我正在使用Visual Studio 2012。有没有办法解决这个问题

Person.cs的内容

namespace ContosoUniversity2.DAL{
using System;
using System.Collections.Generic;

public partial class Person
{
    public Person()
    {
        this.StudentGrades = new HashSet<StudentGrade>();
        this.Courses = new HashSet<Course>();
    }

    public int PersonID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public Nullable<System.DateTime> HireDate { get; set; }
    public Nullable<System.DateTime> EnrollmentDate { get; set; }

    public virtual OfficeAssignment OfficeAssignment { get; set; }
    public virtual ICollection<StudentGrade> StudentGrades { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
}
}
namespace contosuniversity2.DAL{
使用制度;
使用System.Collections.Generic;
公共部分阶级人士
{
公众人士()
{
this.StudentGrades=new HashSet();
this.Courses=newhashset();
}
公共int PersonID{get;set;}
公共字符串LastName{get;set;}
公共字符串名{get;set;}
公共可空的HireDate{get;set;}
公共可为空的EnrollmentDate{get;set;}
公共虚拟officesignment officesignment{get;set;}
公共虚拟ICollection学生成绩{get;set;}
公共虚拟ICollection课程{get;set;}
}
}
我的Students.aspx中的一段代码,在那里我得到了错误

 <asp:GridView ID="SearchGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="PersonID"
    DataSourceID="SearchEntityDataSource" AllowPaging="true">
    <Columns>
        <asp:TemplateField HeaderText="Name" SortExpression="LastName, FirstName">
            <ItemTemplate>
                <asp:Label ID="LastNameFoundLabel" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>, 
                <asp:Label ID="FirstNameFoundLabel" runat="server" Text='<%# Eval("FirstName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Enrollment Date" SortExpression="EnrollmentDate">
            <ItemTemplate>
                <asp:Label ID="EnrollmentDateFoundLabel" runat="server" Text='<%# Eval("EnrollmentDate", "{0:d}") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

, 
如果你需要更多的代码,只要问我,我会更新。
提前谢谢

您需要做的第一件事是将entity framework更新为最新版本,以便您可以使用所有最新功能

您需要了解的另一件事是实体框架中的继承策略

每个层次表(TPH):这种方法建议为整个类继承层次结构使用一个表。表包括区分继承类的鉴别器列。这是实体框架中的默认继承映射策略

每种类型的表(TPT):这种方法建议为每个域类提供单独的表

每个具体类的表(TPC):这种方法建议一个具体类使用一个表,而不是抽象类。因此,如果您在多个具体类中继承抽象类,那么抽象类的属性将成为具体类的每个表的一部分

他们已经将实体框架6与抽象类一起使用,所以将链接作为底部

 public abstract class Person
{
    public int ID { get; set; }

    [Required]
    [StringLength(50)]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    [Required]
    [StringLength(50, ErrorMessage = "First name cannot be longer than 50 characters.")]
    [Column("FirstName")]
    [Display(Name = "First Name")]
    public string FirstMidName { get; set; }

    [Display(Name = "Full Name")]
    public string FullName
    {
        get
        {
            return LastName + ", " + FirstMidName;
        }
    }
}

我刚刚发现我使用了错误的框架(教程针对的是4.0,我使用的是4.5)。你的雨篷还是很光滑的。非常感谢muchi不得不等6分钟你是幸运的luke