实体框架外键(或缺少)

时间:2009-05-31 22:49:19

标签: c# asp.net-mvc entity-framework efpocoadapter

所以我永远倾注了这段代码,试图解决这个问题......我正在使用带有EFPocoAdapter的.NET 3.5 SP1中的ASP.NET MVC的实体框架1.0(所以单独的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 个答案:

答案 0 :(得分:2)

所以我明白了,哦,我的话确实花了我很长时间......也是如此明显。我不需要通过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);
                // ...

希望这有助于其他人!

答案 1 :(得分:0)

是否存在ID为8的公司?我会说改变你的代码以获得正确的公司,我打赌这个问题会消失。

你的Lamda表达可能有问题,但我不太了解他们。