【问题标题】:Navigation property of entity is not loading实体的导航属性未加载
【发布时间】:2011-10-22 13:46:26
【问题描述】:

我正在构建一个预订系统。我有用户角色('admin'、'client'、'employee'、'student')。

每个预订必须与角色客户的用户相关联,它可能分配给角色员工的用户,也可能分配给角色学生的用户。

因此,在我的预订类中,我有 User 类型的属性,并用 [ForeignKey("AnytypeId")] 属性对它们进行了标记,以提示 EF 的关系。

我在http://blog.stevensanderson.com/2011/01/28/mvcscaffolding-one-to-many-relationships/看到过这样的代码

public class Reservation
{

    public int ReservationID
    {
        get;
        set;
    }

    [Required(ErrorMessage="Please provide a valid date")]
    public DateTime ReservationDate
    {
        get;
        set;
    }
    public DateTime ReservationEnd { get; set; }
    public DateTime EntryDate
    {
        get;
        set;
    }
    public DateTime UpdatedOn
    {
        get;
        set;
    }
    public decimal Ammount
    {
        get;
        set;
    }

    public decimal? Discount { get; set; }

    [DataType(DataType.MultilineText)]
    public string ServiceDetails { get; set; }

    [DataType(DataType.MultilineText)]        
    public string Remarks { get; set; }

    public String  PaymentMethod { get; set; }
    public string VoucherNumber { get; set; }

    public int ServiceID
    {
        get;
        set;
    }
    public virtual Service Service
    {
        get;
        set;
    }


    public string EmployeeID { get; set; }
    [ForeignKey("EmployeeID")]
    public virtual User Employee { get; set; }


    public string ClientID { get; set; }
    [ForeignKey("ClientID")]
    public virtual User Client { get; set; }


    public string StudentID { get; set; }
    [ForeignKey("StudentID")]
    public virtual User Student { get; set; }


}

public class ReservationMap : EntityTypeConfiguration<Reservation>
{
    public ReservationMap()
    {
        this.HasOptional(r => r.Client).WithMany().WillCascadeOnDelete(true);
        this.HasOptional(r => r.Employee).WithMany().WillCascadeOnDelete(false);
        this.HasOptional(r=>r.Student).WithMany().WillCascadeOnDelete(false);
    }
}

现在,当我运行我的 mvc3 EF 代码时,首先使用以下 ERD 和 edmx 模型为我即时创建的应用程序数据库。

现在我遇到的几个问题: 1. 当我在视图中列出角色客户端的所有用户时,他们的预订属性始终显示为 0,即使他们是数据库中可用的预订。不知道为什么这个标有 virtual 的集合属性没有加载??

请帮我解决这个问题,这是剩下的最后一件事了。

【问题讨论】:

    标签: entity-framework-4 linq-to-entities


    【解决方案1】:

    您的模型存在几个问题。您已经配置了一对多关系,使得多端(Reservations 属性)从映射中排除。因此,Reservations 不会被 EF 加载。

    另一个问题是,如果您要将Reservations 属性映射为关系的多端,那么导航属性将是什么?是EmployeeClientStudent?因为这些属性中只有一个可以参与与Reservations 属性的关系。

    不清楚您的描述应如何对这些关系建模。一种方法是拥有 3 个集合属性。

    public class ReservationMap : EntityTypeConfiguration<Reservation>
    {
        public ReservationMap()
        {
            HasOptional(r => r.Client).WithMany(u => u.ClientReservations).WillCascadeOnDelete(true);
            HasOptional(r => r.Employee).WithMany(u => u.EmployeeReservations).WillCascadeOnDelete(false);
            HasOptional(r=>r.Student).WithMany(u => u.StudentReservations).WillCascadeOnDelete(false);
        }
    }
    

    【讨论】:

    • 你能告诉我这是否可能吗?公共类 ReservationMap : EntityTypeConfiguration { public ReservationMap() { HasOptional(r => r.Client).WithMany(u => u.Reservations).WillCascadeOnDelete(true); HasOptional(r => r.Employee).WithMany(u => u.Reservations).WillCascadeOnDelete(false); HasOptional(r=>r.Student).WithMany(u => u.Reservations).WillCascadeOnDelete(false); } } 以便每种类型的用户都可以填充他们的预订?
    • 我已经尝试了代码并得到以下错误 指定的架构无效。错误:(89,6):错误 0040:类型 Reservation_Employee 未在命名空间 CRS.Domain.Concrete 中定义(别名 = Self)。 (90,6):错误 0040:类型 Reservation_Client 未在命名空间 CRS.Domain.Concrete 中定义(别名=Self)。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多