我有以下课程:
public class Delivery
{
// Primary key, and one-to-many relation with Customer
public int DeliveryID { get; set; }
public virtual int CustomerID { get; set; }
public virtual Customer Customer { get; set; }
// Properties
string Description { get; set; }
}
有人可以解释为什么他们的客户信息是用虚拟编码的。这是什么意思?
答案 0 :(得分:5)
根据评论判断,您正在学习实体框架吗?
虚拟此处意味着您正在尝试使用延迟加载 - 当客户等相关项目可以由EF自动加载时
例如,当使用下面定义的Princess实体类时,将在第一次访问Unicorns导航属性时加载相关的独角兽:
public class Princess
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Unicorn> Unicorns { get; set; }
}
答案 1 :(得分:4)
有人可以解释为什么他们的客户信息是用虚拟编码的。这是什么意思?
虚拟关键字意味着从此基类派生的超类(即交付)可以覆盖该方法。
如果该方法未标记为虚拟,则无法覆盖该方法。
答案 2 :(得分:1)
猜猜你正在使用EF。
当您创建NavigationProperty
虚拟时,会发生什么,EF会动态创建派生类
该类实现允许延迟加载和其他任务的功能,例如维护EF为您执行的关系。
只是为了让你的样本类动态变成这样的想法:
public class DynamicEFDelivery : Delivery
{
public override Customer Customer
{
get
{
return // go to the DB and actually get the customer
}
set
{
// attach the given customer to the current entity within the current context
// afterwards set the Property value
}
}
}
您可以在调试时轻松看到这一点,EF类的实际实例类型具有非常奇怪的名称,因为它们是即时生成的。