如何將臨時項存儲在ObjectContext中而不保存到數據庫?實體框架:存儲實體而不保存到數據庫
上下文存儲在HttpContext的,由類,它提供:
public static class HttpContextExtension
{
public static MyEntityDataModelContainer GetMyContext(this HttpContext httpContext)
{
if (httpContext.Items["MyEntityDataModelContainer"] == null)
{
httpContext.Items.Add("MyEntityDataModelContainer", new MyEntityDataModelContainer());
}
return (MyEntityDataModelContainer)httpContext.Items["MyEntityDataModelContainer"];
}
}
有兩個空的網頁: 1)FirstPage.aspx.cs:
public class FirstPage : Page
{
protected void Page_Load(object sender, EventArgs e)
{
// crete new item
MyEntity newTemporaryItem = new MyEntity { MyEntityID = Guid.NewGuid() };
// attach them to Context
HttpContext.Current.GetMyContext().MyEntitySet.Attach(newTemporaryItem);
// save changes
HttpContext.Current.GetMyContext().SaveChanges();
// get all attached to Context items
var addedItems = (from se in HttpContext.Current.GetMyContext().ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged)
where se.Entity is MyEntity
select se.Entity).AsQueryable();
int CountInFirstPage = addedItems.Count();
}
}
所以,CountInFirstPage = 1
2)SecondPage.aspx.cs:
public class FirstPage : Page
{
protected void Page_Load(object sender, EventArgs e)
{
// get added in First page items From HttpContext
var addedItems = (from se in HttpContext.Current.GetMyContext().ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged)
where se.Entity is MyEntity
select se.Entity).AsQueryable();
int CountInSecondPage = addedItems.Count();
}
}
這裏CountInSecondPage = 0
我哪裏錯了?
是的,SecondPage通過鏈接從FirstPage定位...嘗試使用Session – asolovyov 2011-05-10 13:16:06
它的工作原理!我通過httpContext.Session重新編寫了HttpContextExtension。謝謝! – asolovyov 2011-05-10 14:16:47
不錯。無論如何:) – sra 2011-05-10 14:17:46