我是一个新手学习实体框架(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;
}
答案 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
您可以将它用于您的应用程序中的所有实体。