如何在.NET Web窗体应用程序中管理应用程序范围的静态模型类

时间:2011-11-22 07:10:34

标签: c# .net sql web-services webforms

我在DB中有两个表

表名问题

列: _id,QuizId,QuestionText

和第二个表答案

列: _id,QuesId,QuizId,AnswerText,IsRight

现在我通过数据访问层

填充了这样的模型
Class QuestionAnswers
{

   int _id {get;set;}
   string QuestionText {get;set;}
   List<Answer> AnswerList { get; set;}
}

而答案课如下

class Answer
{
   int _id {get;set;}
   string AnswerText {get;set;}
   boolean IsRight{ get;set;}
}

现在,由于一组学生拥有相同的QuestionAnswers,所以通过我的数据访问层,我将首次选择QA集,然后我希望将这些现有QA呈现给所有其他后续请求。

要实现这一点,我必须创建静态列表 QAList 。那么如何管理这个 QAList 对象,因为我想从Web服务项目和Web窗体项目访问这个对象,因为我使用的是常见的模型和常见的BusinessLogic类库项目。

我只想知道如何管理此对象,以便可以从同一解决方案中的多个项目访问它以及如何管理此对象,以便所有登录我的Web应用程序的用户都可以访问它(可以通过使类静态)。

2 个答案:

答案 0 :(得分:3)

  

可从同一解决方案中的多个项目访问

转到要使用这些类的项目,并将项目引用添加到包含这些类的项目中。

  • 右键点击参考文献。
  • 点击添加参考。
  • 更改为“项目”标签。
  • 选择您的模型项目。

  

所有登录我的网络应用的用户都可以访问

不,我拒绝。您还没准备好处理该共享列表实例的多线程问题。我的建议是避免使用static关键字。


简要说明。这是一个静态属性。

public static List<Animal> Zoo {get;set;}

ThreadA正在使用此声明查看列表

List<Bear> funnyBears = StaticClassName.Zoo.OfType<Bear>().Where(bear => bear.IsFunny).ToList();

与此同时,ThreadB做到了这一点:

StaticClassName.Zoo.Add(new Zebra());

ThreadA现在获得了关于如何在修改列表时无法枚举列表的例外。

此外,了解RaceConditions(特别是计算方法)和Deadlocks(当你第二次尝试解决竞争条件时会发生什么)。

答案 1 :(得分:0)

我想我应该使用这个链接http://geekswithblogs.net/Rhames/archive/2011/01/10/using-the-asp.net-cache-to-cache-data-in-a-model.aspx,因为他们已经实现了缓存,他们正在管理一个静态的对象列表。