【发布时间】:2014-02-13 22:53:02
【问题描述】:
我有一个实体框架生成的 CodeModel。 (数据库优先)。 所有这些都是数据库中的视图。 公共类类型代码 { 公共字符串代码; 公共字符串 描述 } 公共类 TypeCode1 { 公共字符串代码; 公共字符串 描述 }
每次应用程序打开时,我们都会从视图中加载这些代码。这需要相当多的时间(3 分钟),只是为了加载一些初始化数据。(每次应用程序打开时)。我有 1000 种这样的 TypeCode 类型——TypeCode1、TypeCode2..所有的 TypeCode 都具有相同的结构代码、描述
这就是我们加载代码列表的方式
using(SQlEntitiesContext _context = new SQlEntitiesContext())
{
TypeCodes = _context.TypeCode.ToList();
TypeCodes1 = _context.TypeCode1.ToList();.....
..
..
..
}
我想构建一个 web 服务,它可以加载所有这些列表(它们不会改变)并在需要时为应用程序的每个实例使用它们。最好不要为应用程序的每个实例查询数据库。 Webservice 将做更多的事情而不仅仅是代码。它将加载和缓存所有代码以开始。 目前由于网络原因需要更长的时间
所以我就这样启动了 wcfService
public interface ICodesService
{
[OperationContract]
Codes LoadCodeData();
}
[Serializable]
[DataContract]
public class Codes
{
[DataMember]
public List<TypeCode> TypeCodes{ get; set; }
[DataMember]
public List<TypeCode1> TypeCodes1{ get; set; }
}
}
LoadCodes.svc
public class LoadCodesService : ICodesService
{
Codes _AllCodes = new Codes();
public Codes LoadCodeData()
{
using (CodeEntities _codes = new CodeEntities())
{
_AllCodes.TypeCodes= _codes.TypeCode.ToList();
_AllCodes.TypeCodes1= _codes.TypeCodes.ToList();
}
}
在客户端
private void button1_Click(object sender, EventArgs e)
{
LoadCodesServiceReference.CodesServiceClient proxy = new LoadCodesServiceReference.CodesServiceClient();
_codes = proxy.LoadCodeData();
}
我想知道将这些对象中的任何一个设为静态是否是个好主意。对于正在加载的应用程序的每个实例。我们能否以某种方式缓存现有代码并在需要时重用。有哪些可用选项?不能使用 DataReader。
【问题讨论】:
-
这听起来像你想在 WCF 中使用缓存,这与实体框架无关。您或许可以在这里找到答案:msdn.microsoft.com/en-us/library/ee230443%28v=vs.100%29.aspx
标签: entity-framework