我最近开始在我的.NET 4.0应用程序中使用Entity Framework 4.0,并对与池化相关的一些事情感到好奇.
据我所知,连接池由ADO.NET数据提供程序管理,在我的情况下是MS SQL服务器.当您实例化新的实体context(ObjectContext)时,这是否适用,即无参数new MyDatabaseModelEntities()?
a)为应用程序创建全局实体上下文(即一个静态实例)或b)使用using块为每个给定操作/方法创建和公开实体上下文有哪些优点和缺点.
我应该了解的某些场景的任何其他建议,最佳实践或常用方法?
我试图填充GridView使用Entity Frameworkm但每次我收到以下错误:
"对象'COSIS_DAL.MemberLoan'上的属性访问器'LoanProduct'引发了以下异常:ObjectContext实例已被释放,不能再用于需要连接的操作."
我的代码是:
public List<MemberLoan> GetAllMembersForLoan(string keyword)
{
using (CosisEntities db = new CosisEntities())
{
IQueryable<MemberLoan> query = db.MemberLoans.OrderByDescending(m => m.LoanDate);
if (!string.IsNullOrEmpty(keyword))
{
keyword = keyword.ToLower();
query = query.Where(m =>
m.LoanProviderCode.Contains(keyword)
|| m.MemNo.Contains(keyword)
|| (!string.IsNullOrEmpty(m.LoanProduct.LoanProductName) && m.LoanProduct.LoanProductName.ToLower().Contains(keyword))
|| m.Membership.MemName.Contains(keyword)
|| m.GeneralMasterInformation.Description.Contains(keyword)
);
}
return query.ToList();
}
}
protected void btnSearch_Click(object sender, ImageClickEventArgs e)
{
string keyword = txtKeyword.Text.ToLower();
LoanController c = new LoanController();
List<COSIS_DAL.MemberLoan> list = new List<COSIS_DAL.MemberLoan>();
list = c.GetAllMembersForLoan(keyword);
if (list.Count <= 0)
{ …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
public class JobsRepository:BaseNewsletterRepository
{
public IEnumerable<Job> GetJobs()
{
var jobs = Newsletterctx.Jobs.Include("Info").OrderBy(o => o.JobID);
return jobs.AsEnumerable();
}
}
public class BusinessNewsletter
{
public static IEnumerable<Job> GetJobs()
{
using (JobsRepository jobsRepository = new JobsRepository())
{
return jobsRepository.GetJobs();
}
}
}
rptJobs.DataSource = BusinessNewsletter.GetJobs();
rptJobs.DataBind();
Run Code Online (Sandbox Code Playgroud)
当我尝试绑定时,我得到错误:
ObjectContext实例已被释放,不能再用于需要连接的操作.
是唯一的解决方案,在BusinessNewsletter类中转换和返回List吗?
public static IList<Job> GetJobs()
{
IList<Job> job;
using (JobsRepository jobsRepository = new JobsRepository())
{
job = jobsRepository.GetJobs().ToList();
}
return job;
}
Run Code Online (Sandbox Code Playgroud)
另一个相关问题:
如何在不指定特定类型的情况下检索数据并将数据绑定到转发器(List<type>或IEnumerable<type>)
如果我返回如下特定对象,我需要它:
var specificJob = from job …Run Code Online (Sandbox Code Playgroud) 我正在创建一个C#Web应用程序,在那里我可以添加公司以及公司拥有分支机构的地方.一家公司可以拥有多个分支机构.在一个地方可能有几家公司.所以之间的关系Companies,并Territory为多对多.
这是我目前的公司模型,
public class CompanyModel
{
[HiddenInput(DisplayValue = false)]
public long CompanyId { get; set; }
[Display(Name = "Company Name")]
[Required(ErrorMessage = "* required")]
public string CompanyName { get; set; }
[Display(Name = "Phone Number")]
[Required(ErrorMessage = "* required")]
[RegularExpression(@"\d*", ErrorMessage = "Not a valid phone number")]
public string PhoneNo { get; set; }
[Display(Name = "Post Code List", Prompt = "eg. BA5, BS16")]
public string PostCodeList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它有一个文本框,它将采用逗号分隔的字符串.所以我用foreach …
我有以下EF代码的第一个代码.它工作正常.但当我寻找'club2.Members'的价值时,它会说:
'club2.Members'抛出了'System.ObjectDisposedException'类型的异常.
消息是:
ObjectContext实例已被释放,不能再用于需要连接的操作.
我没有为Members属性设置值.没关系.但是它不应该在内部引起任何异常.
注意:我不需要俱乐部实体中的会员数据(在我打电话的时候).即使当时没有成员加入俱乐部.我只需要摆脱异常; 不使用预先加载来加载数据.如何避免异常?

namespace LijosEF
{
public class Person
{
public int PersonId { get; set; }
public string PersonName { get; set; }
public virtual ICollection<Club> Clubs { get; set; }
}
public class Club
{
public int ClubId { get; set; }
public string ClubName { get; set; }
public virtual ICollection<Person> Members { get; set; }
}
//System.Data.Entity.DbContext is from EntityFramework.dll
public class NerdDinners : System.Data.Entity.DbContext
{
public …Run Code Online (Sandbox Code Playgroud)