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