我最近与实体框架开始的MVC项目我做得到与技术的夹具和我有几个问题:..实体框架 - 建议和最佳实践
我第一个是这个,这是我的一个实体保存代码 - 这是最好的方式..它看起来有点涉嫌我..
public bool SavePrank(PrankDefinition prank)
{
if (prank == null)
throw new ArgumentNullException("prank");
if (prank.ID == 0)
{
DataBase.Pranks.Add(prank);
DataBase.SaveChanges();
}
else
{
DataBase.Pranks.Attach(prank);
DataBase.Entry(prank).State = EntityState.Modified;
DataBase.SaveChanges();
}
return true;
}
香港专业教育学院还得到这个代码,获取最新版本的实体..
public List<PrankDefinition> GetPranks()
{
List<PrankDefinition> pranks = DataBase.Pranks.Where(p => p != null).ToList();
foreach (PrankDefinition prankDef in pranks)
{
DataBase.Entry(prankDef).Reload();
}
return pranks;
}
iive不得不调用实体的重新加载的原因是因为当另一个客户端正在使用该项目时 - 实体的更改不会立即反映出来(这很关键)。我的问题是 - 有没有更好的方法来做到这一点?有什么我可以附加到Where方法来获取最新版本?
我的上下文 - 如果它可以帮助..
public static DataContext DataBase
{
get
{
if (HttpContext.Current != null && HttpContext.Current.Session["DataBase"]== null)
{
HttpContext.Current.Session["DataBase"] = new DataContext();
}
return HttpContext.Current.Session["DataBase"] as DataContext;
}
set
{
if (HttpContext.Current != null)
HttpContext.Current.Session["DataBase"] = value;
}
}
任何帮助将是非常美妙!
编辑:更新到数据文本
这会是一个更好的实施的DataContext的?
public static DataContext DataBase
{
get { return new DataContext(); }
}
欢呼声。 ste。
感谢所有队友的建议。 SavePrank方法是非常自包含的,所以这就是为什么我在那时使用SaveChanges - 这仍然是不正确的?..另请参阅更新上下文。 – Steoates
@Stephen:不,在这种特殊情况下并不正确。这就是如何在更复杂的情况下处理SaveChanges的问题。在我看来,将SaveChanges保存在存储库之外是更好的方法。您在问题中的更新很糟糕:您每次访问“数据库”属性时都会创建一个新的上下文。 – Slauma