在mvc中使用模型类中的虚拟属性

时间:2015-09-25 14:34:02

标签: asp.net asp.net-mvc entity-framework

@Configuration
@Import({PropertyPlaceholderAutoConfiguration.class, ServerPropertiesAutoConfiguration.class,
    EmbeddedServletContainerAutoConfiguration.class, DispatcherServletAutoConfiguration.class})
@EnableIntegration
public static class ContextConfiguration {

上下文类

public class Employee
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public int DesignationID { get; set; }

    **public virtual Designation Designation { get; set; }**
}

ViewModelClass

public class DataClass : DbContext
{
    public DbSet<Employee> Employee{ get; set; }
    public DbSet<Designation> Designation { get; set; }
}

查询: -

public class Class3
{
    public Employee Employee{ get; set; }
    public Designation Designation { get; set; }
}

如果您查看员工类属性

(from emp in dc.Employee
    join designation in dc.Designation 
        on emp.DesignationID equals  designation.DesignationID 

    select new Class3
     {
        Employee = emp ,
        Designation = designation,
     }).Single();

即使删除此属性,此属性也没用,代码可以正常工作

我的方法是对的吗?因为互联网上的每个例子都定义了这个属性,但在我的情况下它是没有用的,我认为这些是出于投影目的而不理解它的机制

谢谢

3 个答案:

答案 0 :(得分:3)

如果您确实想要使用自制联接查询数据,您可以安全地删除Employee.Designation属性。

实体框架通常使用虚拟属性来处理相关对象的lazy loading(在第一次引用实体/实体的属性时,实体或实体集合自动从数据库加载的过程)访问)。

因此,使用延迟加载,您的查询可以写为

(from emp in dc.Employee
    select new Class3
     {
        Employee = emp ,
        Designation = emp.Designation,
     }).Single();

和EntityFramework将自行连接。

旁注:在这种情况下,您的Class3视图模型看起来几乎与Employee模型重复,因此看起来多余。但我想这可能是一些同义的例子,而不是真实的例子。

答案 1 :(得分:1)

虚拟属性主要由实体框架使用,并且未在您的应用程序中使用(据我所见)。所以你可以安全地删除它:)。

他们实际做了什么: 在运行时,将为您的虚拟属性创建一个新类,并且实体框架将使用该类,因为它比使用常规类更快。

修改 它被称为lazy loading

答案 2 :(得分:1)

模型中的虚拟属性通常由ORM(例如Entity Framework / nHibernate)创建/使用,用于延迟加载(它们仅在访问数据时加载数据)。

如果在这种情况下是这种情况,我希望看到所有属性已应用虚拟,但他们并非如此。

在这种情况下,它似乎不需要是虚拟的,并且不清楚该问题是否与虚拟属性或属性的存在有关。

由于您未使用Desgination属性,因此可以安全地将其删除 - 免责声明:如果您的应用程序因删除它而中断,请将其快速恢复....:)

如果该类是自动创建的,那么您的数据库中可能存在关系。

有了该属性,您可以通过设置class3完全取消emp.Desgination