Внешний ключ Entity Framework (или его отсутствие) - PullRequest
2 голосов
/ 01 июня 2009

Так что я наливаю этот код навсегда, пытаясь это выяснить ... Я использую Entity Framework 1.0 с ASP.NET MVC в .NET 3.5 SP1 с EFPocoAdapter (так что отдельные классы Poco).

Итак, у меня есть следующий код для одного из контроллеров:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditUser(int? id, FormCollection form)
    {
        var user = new User();

        using (var db = new UMSEntities { DeferredLoadingEnabled = false })
        {
            if (id != null)
            {
                user = db.Users.FirstOrDefault(p => p.UserID.Equals((int) id));
                db.LoadProperty(user, p => p.UserProfiles);
                db.LoadProperty(user, p => p.UserCompanyProfile);
            }
            else
            {
                user.UserGuid = Guid.NewGuid();
                user.DateCreated = DateTime.Now;
                user.DateLastActivity = DateTime.Now;
                user.DateModified = DateTime.Now;
                user.Password = "demo";
                user.Version = 0;
                user.SecretAnswer = "";
                user.SecretQuestion = "";
                user.IsApproved = true;
                user.IsActive = true;

                user.UserProfiles = new UserProfile();
                user.UserCompanyProfile = new UserCompanyProfile
                      {
                          EmployeeID = "",
                          HireDate = DateTime.Now,
                          Title = "",
                          UserCode = "",
                          Company = db.Companies.First(p => p.CompanyID == 8)
                      };

                db.Users.InsertOnSaveChanges(user);

            }

            TryUpdateModel(user);

            db.SaveChanges();
        }

Редактирование существующего пользователя работает отлично (обратите внимание, если id! = Null). Тем не менее, это часть кода, которая добавляет нового пользователя. Это работает, пока я не попадаю в ту часть кода, где я добавляю UserCompanyProfile к объекту пользователя. Если я закомментирую этот код, он работает просто отлично. Проблема возникает, когда я пытаюсь присоединить компанию к UserCompanyProfile, запрашивая базу данных - я получаю эту ошибку.

Entities in 'UMSEntities.UserCompanyProfiles' participate in the 'FK__UserCompa__Compa__25869641' relationship. 0 related 'Companies' were found. 1 'Companies' is expected.

Кстати, он действительно возвращает один объект Company (он имеет тип PocoProxies.CompanyProxy). Любая помощь, безусловно, будет оценена!

Ответы [ 2 ]

2 голосов
/ 01 июня 2009

Так что я понял это, о, мое слово, это заняло у меня много времени ... тоже очевидно. Вместо того, чтобы запрашивать компанию и связывать ее через UserCompanyProfile, мне нужно было связать ее наоборот:

                // ...
                user.UserProfiles = new UserProfile();
                user.UserCompanyProfile = new UserCompanyProfile
                      {
                          EmployeeID = "",
                          HireDate = DateTime.Now,
                          Title = "",
                          UserCode = ""
                      };

                var company = db.Companies.First(p => p.CompanyID.Equals(16));
                company.UserCompanyProfile.Add(user.UserCompanyProfile);

                db.Users.InsertOnSaveChanges(user);
                // ...

Надеюсь, это поможет кому-то еще!

0 голосов
/ 01 июня 2009

Существует ли компания с идентификатором 8? Я бы сказал, измените свой код, чтобы сначала получить правильную компанию, и я уверен, что проблема исчезнет.

Возможно, что-то не так с твоим выражением Ламды, но я недостаточно хорош, чтобы знать.

...