aso*_*yov 6 c# asp.net entity-framework httpcontext
如何在不保存到数据库的情况下在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"];
}
}
Run Code Online (Sandbox Code Playgroud)
有两个空页: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();
}
}
Run Code Online (Sandbox Code Playgroud)
所以,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();
}
}
Run Code Online (Sandbox Code Playgroud)
这里CountInSecondPage = 0.
哪里我错了?
我说得对吗,第二页是第二个请求?
在这种情况下,您将拥有一个新的 HttpContext.Items 集合,并且上次请求中的值将消失。在这种情况下,请考虑使用会话来存储这些值。
脚注: EntityContext 只能用于一个请求,因此可以存储在 HttpContext.Items 集合中,但绝不能作为 Session 值!此处仅存储结果(例如计数)。
| 归档时间: |
|
| 查看次数: |
1935 次 |
| 最近记录: |