我有一个通过网络服务调用业务层类(C#类)的Windowsphone客户端。
在我的业务层类中,这是一个C#类,而不是silverlightclass,我有List<int> numbers = new List<int>()
从业务层类中的方法,列表中填充了数字。在此方法用数字填充列表后,将再次调用客户端层,并调用客户端中的新方法,然后再次返回业务层。这是问题所在,我希望在从客户层到业务层的调用之间保持List<int> numbers
。现在,每次调用业务层时,List<int> numbers
都会变空。
在silverlight类中,我可以使用独立存储来保持应用程序级别的数据存活。在asp.net中,我可以使用应用程序状态,会话或其他任何内容。
如何将此List存储在C#类中以在调用之间将数据保存在List中?
第一次通话
客户 - &gt; webservice - &gt; businesslayer = List<int> numbers
获取值
第二次通话(问题)
客户 - &gt; webservice - &gt; businesslayer = List<int> numbers
我希望列表保留第一次调用的值,但它是空的,因为我无法将列表保存为ApplicationState或Isolated Storage等。
这是关于这个问题的代码
public class TimereportDataAccess
{
TimereportDBEntities1 context = new TimereportDBEntities1();
List<int> dayId = new List<int>(); // Used in sendDays() and sendWeeks()
bool submitStatus = true; // Used in sendDays() and sendWeeks()
public List<int> sendDays(List<Common.Day> days, bool status)
{
TimereportMappers mapper = new TimereportMappers();
foreach(var item in mapper.dayMap(days))
{
context.Days.AddObject(item);
context.SaveChanges();
dayId.Add(item.Id);
}
if (status == true)
{
submitStatus = true;
}
else
{
submitStatus = false;
}
return dayId;
}
public void sendWeeks(List<Common.Week> weeks)
{
TimereportMappers mapper = new TimereportMappers();
foreach (var item in mapper.weekMap(weeks))
{
context.Weeks.AddObject(item);
}
context.SaveChanges();
int firstday;
firstday = dayId.FirstOrDefault();
if (submitStatus == true )
{
int reportId = (from u in context.Users
join r in context.Reports on u.Id equals r.UserId
join w in context.Weeks on r.Id equals w.ReportId
join d in context.Days on w.DayId equals d.Id
where d.Id.Equals(firstday)
select r.Id).SingleOrDefault();
Reports report = context.Reports.SingleOrDefault(i => i.Id == reportId);
report.Status = "submitted";
context.SaveChanges();
}
dayId.Clear();
}
答案 0 :(得分:3)
为了使您的对象保持在内存中,首先需要确保您的wcf服务在每个调用模式下都不起作用。如果是这种情况,则每次调用服务时,都会生成一个包含新对象的新线程。我假设您已根据会话标记了您的服务。
然后你可以将对象标记为静态,在第一次调用时,你可以从数据库中获取数据;当服务接收到另一个呼叫时,您只需检查您的列表是否已填充并发送回内存列表。
另一方面,这种方法存在问题;如果数据库改变怎么办?即使数据库发生更改,列表也保持不变。因此,您需要使用某种脏机制并将列表标记为脏。每当它变脏时,你需要从数据库中再次获取它。
如果您认为您的列表没有更改,那么您不需要将其存储在数据库中,您只需使用XML文件。