Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架外键(或缺少外键)_C#_Asp.net Mvc_Entity Framework_Efpocoadapter - Fatal编程技术网

C# 实体框架外键(或缺少外键)

C# 实体框架外键(或缺少外键),c#,asp.net-mvc,entity-framework,efpocoadapter,C#,Asp.net Mvc,Entity Framework,Efpocoadapter,所以我一直都在写这段代码,试图弄明白这一点。。。我正在使用EntityFramework1.0和ASP.NETMVC,在.NET3.5SP1中使用EFPocoAdapter(所以是单独的Poco类) 因此,我为其中一个控制器编写了以下代码: [AcceptVerbs(HttpVerbs.Post)] public ActionResult EditUser(int? id, FormCollection form) { var user = new Use

所以我一直都在写这段代码,试图弄明白这一点。。。我正在使用EntityFramework1.0和ASP.NETMVC,在.NET3.5SP1中使用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();
        }
编辑一个exist用户是完美的(注意,如果id!=null)。但是,它是添加新用户的代码部分。它一直工作到我将UserCompanyProfile添加到user对象的代码部分。如果我把这段代码注释掉,它就可以正常工作了。当我试图通过查询数据库将公司附加到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)。任何帮助都将不胜感激

是否存在ID为8的公司?我想说的是,先改变你的代码,找到正确的公司,我打赌这个问题会消失


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

所以我想起来了,哦,我的话,我花了很长时间。。。太明显了。我不需要查询公司并通过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);
                // ...
希望这对其他人有帮助

我确实在我的帖子(结尾)中提到,它返回一个Company对象,这意味着该公司确实存在。我很确定Lambda是正确的,但是如果有人有洞察力,那就太好了。