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]: