ASP.NET C#实体框架-如何正确更新外键?-第二部分

ASP.NET C#实体框架-如何正确更新外键?-第二部分,c#,asp.net,entity-framework-4,C#,Asp.net,Entity Framework 4,这个问题就像我演讲的第二部分 以下是我学到的并希望成为现实的事情: 不要将数据实体上下文用作静态上下文 使用后处理数据上下文-通常在一次之后- 将参数传递到更新实体方法而不是实体 (我要解释一下,我的十字路口就在这里) 这是我修改过的代码: public class ManagerBase { private NoxonEntities _entities = null; public NoxonEntities Entities {

这个问题就像我演讲的第二部分

以下是我学到的并希望成为现实的事情:

  • 不要将数据实体上下文用作静态上下文
  • 使用后处理数据上下文-通常在一次之后-
  • 将参数传递到更新实体方法而不是实体 (我要解释一下,我的十字路口就在这里)
  • 这是我修改过的代码:

    public class ManagerBase
        {
            private NoxonEntities _entities = null;
    
            public NoxonEntities Entities
            {
                get
                {
                    if (_entities == null)
                        _entities = new NoxonEntities();
    
                    return _entities;
                }
            }
        }
    
    //Managers uses ManagerBase class as a Base class
    MemberManager currentMemberManager = new MemberManager();
    currentMemberManager.Save(memberId, username, password, languageId);
    
    
    //MemberManager class
    public Member Save(long memId, string username, string password, int langId)
            {
                using (var Context =   base.Entities)
                {
                    var Data = Context.Member.First(c => c.Id == memId);
    
                    Data.Username = username;
                    Data.Password = password;
                    Data.Language = Context.Language.First(c => c.Id == langId); //Gets the foreign entity
    
                    Context.SaveChanges();
    
                    return Data;
                }
            }
    
    这毫无例外。但是通常这种保存方法是通过接口实现的方法。因此,我宁愿将一个对象值传递给SAVE方法,也不愿像上面那样传递所有字段。 例如,我想用这个:

    //Member is an EntityFramework Object which was created during EF Model when I added by visual studio
    //Filter is the method that returns an EntityFramework Object from EF (and eventually database) with given some arguments
    //SomeArguments could be  MemberId = 2
    Member modifiedMember = currentMemberManager.Filter(someArguments);
    modifiedMember.UserName = "newvalue";
    currentMemberManager.Save(modifiedMember);
    
    在SAVE方法中,我可能会这样使用:

    public Member Save(Member modifiedMember)
                {
                    using (var Context =   base.Entities)
                    {
                        var Data = Context.Member.First(c => c.Id == modifiedMember.Id);
    
                        Data.Username = modifiedMember.Username;
                        Data.Password = modifiedMember.Password;
                        Data.Language = Context.Language.First(c => c.Id == modifiedMember.LanguageId); //Gets the foreign entity
    
                        Context.SaveChanges();
    
                        return Data;
                    }
                }
    
    如果我要像上面一样使用它,我想我不应该使用传递对象EF object,而应该使用我将要编写的其他类来将参数映射到EF成员实体

    第一个问题:这是一个好方法吗?

    public class MyMember
    {
        public long Id { set; get; }
        public string Username { set; get; }
        public string Password { set; get; }
        public int LanguageId { set; get; }
    }
    
    MyMember.Username = "NewValue";
    MyMember.LanguageId = 4; //4 as in new value
    currentMemberManager.Save(MyMember); //As you can see MyMember is not an EF Entity in here
    
    但这将需要很长时间,因为已经有一些书面代码

    第二个问题:我不能在外部使用EF实体对象并在那里修改它以将其保存在MemberManager类中吗?

    public class MyMember
    {
        public long Id { set; get; }
        public string Username { set; get; }
        public string Password { set; get; }
        public int LanguageId { set; get; }
    }
    
    MyMember.Username = "NewValue";
    MyMember.LanguageId = 4; //4 as in new value
    currentMemberManager.Save(MyMember); //As you can see MyMember is not an EF Entity in here
    
    再次感谢您事先提供的帮助。

    以下是答案:


    我感谢那些帮助我的人。

    我在这个链接上找到了答案。[ [1]: