C#视图模型:模型-->;Can';我无法进行打字
我正在使用EF创建一个linq-to-sql模型,并且有一个运行良好的类,但是,我希望能够在使用EF进行更改时添加到该类中,而不让它们被覆盖,因此我相信我需要使用视图类的第二层 因此,我:C#视图模型:模型-->;Can';我无法进行打字,c#,casting,viewmodel,subclass,superclass,C#,Casting,Viewmodel,Subclass,Superclass,我正在使用EF创建一个linq-to-sql模型,并且有一个运行良好的类,但是,我希望能够在使用EF进行更改时添加到该类中,而不让它们被覆盖,因此我相信我需要使用视图类的第二层 因此,我: public partial class People: INotifyPropertyChanging, INotifyPropertyChanged {...} // created by EF 然后我想做: public partial class ViewPeople: People { pu
public partial class People: INotifyPropertyChanging, INotifyPropertyChanged {...} // created by EF
然后我想做:
public partial class ViewPeople: People {
public String someFunction() {...} // additional functionality
}
但是,当我尝试使用下面的代码从人物转换为ViewPeople时,我遇到了一个例外:
无法将“Namespace.Models.People”类型的对象强制转换为“Namespace.Models.ViewPeople”
代码:
//select the person
NSDataContext dc = new NSDataContext(); // to get to the data context and models froM EF
var person = (from p in dc.Peoples where p.id == personID select p).First();
// pass model to view
return View((ViewPeople)person)
如果我只是通过person,我就可以访问所有“People”属性和方法。
当我修改ViewPeople类时,我可以在引用“this”时访问超级“People”类的所有属性和方法
当然很简单,但我就是想不出来
如有人在自动生成的EF模型上实现了viewmodels,我们将不胜感激
提前感谢,,
Andrew如果您从EF获得
People
,则无法神奇地将其转换为ViewPeople
如果对象实际上是
ViewPeople
,则只能将其强制转换为ViewPeople
相反,您需要为
ViewPeople
提供一个构造函数,该构造函数接受People
并复制其属性。如果您从EF获得People
,则无法神奇地将其转换为ViewPeople
如果对象实际上是
ViewPeople
,则只能将其强制转换为ViewPeople
相反,您需要为
ViewPeople
提供一个构造函数,该构造函数接受People
并复制其属性。当实体框架从数据库中获取的数据返回对象时,它创建的是人,而不是ViewPeople。这就解释了为什么不能投射对象。如果要向People类添加功能,可以将其添加到同一程序集中的另一个文件中:
public partial class People
{
public String someFunction() {...} // additional functionality
}
您可以做的另一件事是让ViewPeople类在其构造函数中获取一个People实例,包装People实例的属性(yikes!),并将查询更改为:
//select the person
NSDataContext dc = new NSDataContext(); // to get to the data context and models froM EF
ViewPeople person = (from p in dc.Peoples where p.id == personID select new ViewPeople(p)).First();
// pass model to view
return View(person)
当实体框架从数据库中获取的数据返回对象时,它创建的是人,而不是ViewPeople。这就解释了为什么不能投射对象。如果要向People类添加功能,可以将其添加到同一程序集中的另一个文件中:
public partial class People
{
public String someFunction() {...} // additional functionality
}
您可以做的另一件事是让ViewPeople类在其构造函数中获取一个People实例,包装People实例的属性(yikes!),并将查询更改为:
//select the person
NSDataContext dc = new NSDataContext(); // to get to the data context and models froM EF
ViewPeople person = (from p in dc.Peoples where p.id == personID select new ViewPeople(p)).First();
// pass model to view
return View(person)
你们的类名不应该是复数。他的表是
People
,所以People
是半正确的。这和什么有关系?我们得到ViewPeople应该是viewPerson您的类名不应该是复数。他的表是People
,所以People
是半正确的,这和什么有关系?我们知道ViewPeople应该是ViewPersonSeems奇怪的是,如果ViewPeople扩展了People,那么你就不能从超级角色转换为超级角色了?@Andrew:这是向后的。ViewPeople
始终是People
,并且可以(隐式)转换为People
。然而,People
不是ViewPeople
。似乎很奇怪,如果ViewPeople扩展了People,那么你就不能从超级角色转换为次级角色了?@Andrew:这是向后的。ViewPeople
始终是People
,并且可以(隐式)转换为People
。但是,People
不是ViewPeople
。谢谢!我不知道您可以在不同的文件中添加到分部类。这允许我在不扩展类的情况下“扩展”类,并解决了添加功能的问题,这些功能在重新自动生成时不会被覆盖!谢谢我不知道您可以在不同的文件中添加到分部类。这允许我在不扩展类的情况下“扩展”类,并解决了添加功能的问题,这些功能在重新自动生成时不会被覆盖!