Свойство навигации объекта не загружается - PullRequest
1 голос
/ 22 октября 2011

Я строю систему бронирования. У меня есть пользователи в ролях («администратор», «клиент», «работник», «студент»).

Каждое резервирование должно быть связано с пользователем клиента роли, оно может быть назначено пользователю сотрудника роли, а также может быть назначено пользователю студента роли.

Таким образом, в моем классе резервирования у меня есть свойства типа 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. enter image description here

Теперь у меня мало проблем: 1. Когда я перечисляю всех пользователей ролевых клиентов в поле зрения, их свойство резервирования всегда показывает 0, даже если их резервирование доступно в базе данных. Я не знаю, почему это свойство коллекции, помеченное как виртуальное, не загружается ??

Пожалуйста, я застрял с этим, помогите мне здесь, это последнее, что осталось.

1 Ответ

0 голосов
/ 22 октября 2011

В вашей модели есть пара проблем.Вы настроили отношение один ко многим таким образом, что конец множества (свойство Reservations) исключается из сопоставления.Следовательно, Reservations не будет загружаться EF.

Другая проблема заключается в том, что если вы собираетесь сопоставить свойство Reservations как конец множества отношений, каким будет свойство навигации?это Employee, Client, Student?Поскольку только одно из этих свойств может участвовать в отношениях со свойством 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);
    }
}
...