簡體   English   中英

ASP.NET C#實體框架-如何正確更新外鍵? - 第2部分

[英]ASP.NET C# Entity Framework - How to update Foreign Key properly? - Part 2

這個問題就像我上一個問題的第2部分

這是我學到的並希望成為現實的事情:

  1. 不要將數據實體上下文用作靜態
  2. 在使用后處理數據上下文-通常在一段時間后-
  3. 將參數傳遞給UPDATING Entity方法而不是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方法是通過接口實現的方法。 所以,我寧願一個對象值傳遞給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 Member Entity。

第一個問題:這是一個好方法嗎?

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類?

再次感謝您的提前幫助。

答案是:

如何更新實體?

我感謝您為我提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM