【问题标题】:Entity Framework Foreign Key (or lack thereof)实体框架外键(或缺少外键)
【发布时间】:2009-05-31 22:49:19
【问题描述】:

所以我一直在倾注这段代码,试图弄清楚这一点......我在 .NET 3.5 SP1 中使用 Entity Framework 1.0 和 ASP.NET MVC 和 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.

顺便说一句,它实际上返回了一个公司对象(它的类型是 PocoProxies.CompanyProxy)。任何帮助都将不胜感激!

【问题讨论】:

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


    【解决方案1】:

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

    希望这对其他人有帮助!

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我确实在我的帖子中(最后)提到它返回一个公司对象,因此意味着公司确实存在。我很确定 Lambda 是正确的,但如果有人有洞察力,那就太好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多