この質問は、以前の質問のパート 2 のようなものです。
以下は私が学んだことであり、真実であることを願っています。
- データ エンティティ コンテキストを静的として使用しないでください
- 使用後にデータ コンテキストを破棄する -通常は 1 回後-
- Entity の代わりに UPDATING Entity メソッドにパラメーターを渡します (これについて説明します。ここで私の交差点があります)。
これが私の変更されたコードです:
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メソッドはインターフェースによって実装されたメソッドです。したがって、上記のようにすべてのフィールドを渡すよりも、 OBJECT値を 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 オブジェクトを使用するべきではなく、代わりに、パラメーターを 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
ただし、すでにいくつかのコードが記述されているため、これには長い時間がかかります。
2 番目の質問: EF Entity オブジェクトをOUTSIDEで使用し、そこで変更してMemberManagerクラスに保存することはできませんか?
改めまして、この度は大変お世話になりました。