0

私は初心者学習エンティティ フレームワーク (VS2012) であり、テスト用の単純な CRUD アプリケーションを作成しています。簡単な挿入/更新用に次の関数を作成しました。問題がないかどうか、または欠陥があり、改善できるかどうかを知りたいですか?

この関数はクラス ライブラリ クラス ファイルにあり、フォーム送信時に Web UI から呼び出されます。

関数は次のとおりです。

public static bool Save(int id, string hospitalname, string hospitaladdress, int cityid,
                            string postcode, int countryid, string email, string     phone, string fax, string contactperson,
                            string otherdetails, bool isactive, DateTime createddate)
    {
        bool flag = false;
        using (var dataContext = new pacsEntities())
        {
            if (id == 0)
            {
                // insert
                var newhospital = new hospital_master();

                newhospital.hospitalname = hospitalname;
                newhospital.hospitaladdress = hospitaladdress;
                newhospital.cityid = cityid;
                newhospital.postcode = postcode;
                newhospital.countryid = countryid;
                newhospital.email = email;
                newhospital.phone = phone;
                newhospital.fax = fax;
                newhospital.contactperson = contactperson;
                newhospital.otherdetails = otherdetails;
                newhospital.isactive = isactive;
                newhospital.createddate = DateTime.Now;

                dataContext.hospital_master.AddObject(newhospital);
                dataContext.SaveChanges();
                flag = true;
            }
            else
            {
                // update
                var hospital = dataContext.hospital_master.First(c => c.hospitalid == id);
                if (hospital != null)
                {
                    hospital.hospitalname = hospitalname;
                    hospital.hospitaladdress = hospitaladdress;
                    hospital.cityid = cityid;
                    hospital.postcode = postcode;
                    hospital.countryid = countryid;
                    hospital.email = email;
                    hospital.phone = phone;
                    hospital.fax = fax;
                    hospital.contactperson = contactperson;
                    hospital.otherdetails = otherdetails;
                    hospital.isactive = isactive;

                    dataContext.SaveChanges();
                    flag = true;
                }
            }
        }
        return flag;
    }
4

2 に答える 2

0

すべての CRUD 操作を担当する汎用リポジトリを実装できます。

例: http://geekswithblogs.net/seanfao/archive/2009/12/03/136680.aspx

アプリケーションにあるすべてのエンティティに使用できます。

于 2013-10-29T12:23:07.350 に答える
0

あなたができる複数の改善があります:

1-クラスHospitalを作成して渡すことができます

2-個人的には、失敗を判断するためにフラグを返すよりも例外をスローする方が良いと思いますが、成功した場合でも true を返すことができます

3-保存コンテキストはifの外で一度書くことができます

4- .更新シナリオの First は FirstOrDefault にすることができ、成功/失敗のフラグを返す場合は null を確認します。または、true/false を返すのではなく、例外をスローしたい場合に First を失敗させますが、何らかの方法で一貫性を保ち、例外をスローするか、true/false を返します。First を使用して null をチェックしています!

5-エンティティクラス(hospital_master)とは異なる独自のモデルクラス(Hospital)を用意することをお勧めします。上位層ではHospitalクラスを使用し、データ層ではSaveメソッドを使用し、変換するか、またはオブジェクトを水和/脱水します。

6 - 次の方法でオブジェクトの作成を簡素化できます。

new hospital_master
{
    hospitalname = hospital.hospitalname,
    hospitaladdress = hospital.hospitaladdress,
   ...
};

7- Hospital クラス (ToEntity) に拡張メソッドを設定し、それを呼び出すだけで保存できます。

dataContext.hospiltal_master.AddObject(hospital.ToEntity());

8- EntitySet (hospital_masters のインスタンスを含む Hospital_master のセット) は、エンティティ自体と同じ名前を持っているようです。Hospital_master エンティティを作成し、それを Hospital_master に追加しています: datacontext.hospital_master.AddObject... datacontext が必要だと思います。Hospital_masters .AddObect... 複数形。

于 2013-10-29T09:35:41.137 に答える