实体框架代码。效率建议

时间:2013-10-29 09:15:54

标签: asp.net entity-framework visual-studio-2012

我是一个新手学习实体框架(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;
    }

2 个答案:

答案 0 :(得分:0)

您可以做多项改进:

1-你可以创建一个类医院并传递它

2-我个人认为抛出异常比返回标志更好以确定失败,但仍然可以在成功时返回

3-保存上下文可以在if

之外写入一次

4-。更新场景中的第一个可以是FirstOrDefault,如果要返回成功/失败的标志,则检查是否为null;或者只是让第一个失败以防你想要抛出异常而不是返回true / false,但是不管怎样,要么保持一致,你要么抛出异常,要么返回true / false。您正在使用First并检查null!

5-最好让你自己的模型类(Hospital)与你的实体类(hospital_master)不同,在你的更高层,你使用你的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 ...复数。

答案 1 :(得分:0)

您可以实现一个负责所有CRUD操作的通用存储库。

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

您可以将它用于您的应用程序中的所有实体。