首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架外键(或缺少外键)

实体框架外键(或缺少外键)
EN

Stack Overflow用户
提问于 2009-05-31 22:49:19
回答 2查看 3.4K关注 0票数 2

所以我一直在倾注这些代码,试图弄清楚...我使用的是Entity Framework1.0和ASP.NET MVC,在.NET 3.5 SP1中使用EFPocoAdapter (所以是单独的Poco类)。

因此,我为其中一个控制器编写了以下代码:

代码语言:javascript
运行
复制
    [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添加到user对象的代码部分之前,它一直有效。如果我注释掉这段代码,它会工作得很好。当我试图通过查询数据库将一家公司附加到UserCompanyProfile时,问题就出现了--我得到了这个错误。

代码语言:javascript
运行
复制
Entities in 'UMSEntities.UserCompanyProfiles' participate in the 'FK__UserCompa__Compa__25869641' relationship. 0 related 'Companies' were found. 1 'Companies' is expected.

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

EN

回答 2

Stack Overflow用户

发布于 2009-06-01 19:47:20

所以我想通了,哦,我的话真的花了我很长时间…也很明显。而不是查询公司并通过UserCompanyProfile关联它,我需要以相反的方式关联它:

代码语言:javascript
运行
复制
                // ...
                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
EN

Stack Overflow用户

发布于 2009-06-01 00:00:28

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/933052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档