Linq to SQL и MVC 2 "Член класса MyClass.MyProperty не сопоставлен. _COMPlusExceptionCode = -532462766 - PullRequest
0 голосов
/ 05 февраля 2011

Заранее спасибо, что выслушал мою проблему.

У меня есть класс Linq to Sql, для которого в сетке отображаются конкретные свойства, для которых я использую ViewModel.

Сначала я вставлю часть, где я расширяю свой класс с помощью частичного класса:

    public string Owner { get; private set; }
    public Int32 Documents { get; private set; }

    partial void OnLoaded()
    {
        Owner = "PersonCompanyRoleMedicalExam";
        Documents = sfdb.StoredFiles.Count(s => s.Owner == this.Owner && s.OwnerId == this.Id);
    }

Следующая недопустимая вставка моего ViewModel, используемого для сетки:

public class MedicalExamViewModel
{
    public Int32 Id { get; set; }
    public Int32 PersonCompanyRoleId { get; set; }
    public Int32? PeriodInDays { get; set; }
    public DateTime? ExamCompleted { get; set; }
    public bool? MedicallyFit { get; set; }
    public Int32 Documents { get; set; }
}

и, наконец, мой метод для вызова ajax из моей сетки:

    [GridAction]
    public ActionResult _MedicalExamGridAjaxBinding(Int32 Id)
    {
        PersonCompanyRole personCompanyRole = db.PersonCompanyRoles.Single(p => p.PersonId == Id);

        var model = from o in db.PersonCompanyRoleMedicalExams
                    where o.PersonCompanyRoleId == personCompanyRole.Id
                    select new MedicalExamViewModel
                    {
                        Id = o.Id,
                        PersonCompanyRoleId = o.PersonCompanyRoleId,
                        PeriodInDays = o.PeriodInDays,
                        ExamCompleted = o.ExamCompleted,
                        MedicallyFit = o.MedicallyFit,
                        Documents = o.Documents
                    };

        return View(new GridModel
        {
            Data = model
        });
    }

В строке "var model = from o в db.PersonCompanyRoleMedicalExams", где я разбиваю сразу после этого, глядя на объект, я получаю base {System.SystemException} = {"Член класса PersonCompanyRoleSHEAppointment.Documents не сопоставлен."}

Копание глубже в объекте в исключение, которое является System.SystemException, в InnerException говорится следующее: _COMPlusExceptionCode = -532462766.

Забавно, что я использую ту же самую технику для заполнения других объектов / моделей в моем проекте без каких-либо проблем, но есть одно различие, и между ними есть таблица связей. Примерно так: Person -> PersonCompanyRole> PersonCompanyRoleMedicalExam. PersonCompanyRole - это отношение один к одному, а PersonCompanyRole to PersonCompanyRoleMedicalExam - это отношение один ко многим. Для полноты я вставил в мой метод ajax, где я не получаю никаких исключений.

    [GridAction]
    public ActionResult _IncidentsGridAjaxBinding(Int32 Id)
    {
        var structures = db.sp_GetCompanyStructureDecendants(Id);
        Collection<CompanyStructureIncident> companyStructureIncidents = new Collection<CompanyStructureIncident>();

        foreach (sp_GetCompanyStructureDecendantsResult decendant in structures)
        {
            IEnumerable<CompanyStructureIncident> equipment = db.CompanyStructureIncidents.Where(r => r.CompanyStructureId == decendant.Id);
            foreach (CompanyStructureIncident companyStructureIncident in equipment)
            {
                companyStructureIncidents.Add(db.CompanyStructureIncidents.Single(p => p.Id == companyStructureIncident.Id));
            }
        }



        var model = from o in companyStructureIncidents
                    //where o.CompanyStructureId == Id
                    select new IncidentViewModel
                    {
                        Id = o.Id,
                        CompanyStructureId = o.CompanyStructureId,
                        DateOfOccurence = o.DateOfOccurence,
                        DateReported = o.DateReported,
                        Documents = o.Documents
                    };

        return View(new GridModel
        {
            Data = model
        });
    }

Надеюсь, вы можете помочь.

1 Ответ

0 голосов
/ 06 февраля 2011

Я понял, что вместо OnLoad () я делаю это:

    public string Owner
    {
        get { return "PersonCompanyRoleMedicalExam"; }
    }

    public Int32 Documents
    {
        get { return sfdb.StoredFiles.Count(s => s.Owner == this.Owner && s.OwnerId == this.Id); }
    }

Спасибо, в любом случае, надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...