我最近开始在我的.NET 4.0应用程序中使用Entity Framework 4.0,并对与池化相关的一些事情感到好奇.
据我所知,连接池由ADO.NET数据提供程序管理,在我的情况下是MS SQL服务器.当您实例化新的实体context(ObjectContext)时,这是否适用,即无参数new MyDatabaseModelEntities()?
a)为应用程序创建全局实体上下文(即一个静态实例)或b)使用using块为每个给定操作/方法创建和公开实体上下文有哪些优点和缺点.
我应该了解的某些场景的任何其他建议,最佳实践或常用方法?
我正在我的数据库中注册一个新客户端,当该操作完成时,我想显示该新客户端的详细视图.问题是我找不到发送到最近添加的客户端的Detailsaction方法的方法ID.
我正在研究这段代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(ClientModel credential)
{
if(ModelState.IsValid)
{
database.Clients.Add(credential);
database.SaveChanges();
return RedirectToAction("Details", //Here is my problem, because sending credential.ID gives me an error as far as credential doesn't have an ID due it's not a database record.;
}
else
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
这是mi ClientModel:
[Table("Clients")]
public class ClientModel
{
[Key]
public Int16 ID { get; set; }
[Required]
public String Name { get; set; }
public String Address …Run Code Online (Sandbox Code Playgroud) 我尝试使用重新加载功能丢弃一些更改.我得到了InvalidOperationException.我该如何防止这种情况?
DbContext.SaveChanges();
//Entity is in Unchanged state
//Make some changes to an entity
//Change state to modified
DbContext.Entry(entity).Reload();
Run Code Online (Sandbox Code Playgroud)
InvalidOperationException
调用了EntityMemberChanged或EntityComplexMemberChanged,而没有首先在具有相同属性名称的同一更改跟踪器上调用EntityMemberChanging或EntityComplexMemberChanging.有关正确报告更改的信息,请参阅实体框架文档.
编辑:
我启用和禁用ProxyCreationEnabled,LazyLoadingEnabled.
尝试了不同的方法.所有这些尝试都抛出相同的异常.
var objContext = ((IObjectContextAdapter)context).ObjectContext;
objContext.Refresh(RefreshMode.ClientWins, entry.Entity);
Run Code Online (Sandbox Code Playgroud)
entry.OriginalValues.SetValues(entry.GetDatabaseValues());
Run Code Online (Sandbox Code Playgroud)
希望我能得到解决方案.不想处置完整的DbContext来重新加载所有数据.
在这个例子中:
using System;
using System.Collections.Generic;
using dbModel;
using System.Linq;
using System.Data.Entity.Infrastructure;
namespace WinApp
{
public partial class Form1 : Form
{
private dbEntities dbc;
public IQueryable<ARTIKLI> art;
public IQueryable<ART_GRUPE> grp;
public Form1()
{
InitializeComponent();
dbc = new dbEntities();
}
private void GetData()
{
art = from a in dbc.ARTIKLIs
select a;
grp = from g in dbc.ART_GRUPE
select g;
artikliBindingSource.DataSource = art.ToList();
artGrupeBindingSource.DataSource = grp.ToList();
}
private void Form1_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
dbc.SaveChanges();
}
private void loadData_Click(object sender, EventArgs …Run Code Online (Sandbox Code Playgroud)