2014-11-01 2 views
0

У меня есть проблема. Я хочу знать, как мы можем использовать класс in-memory в C# .Net с использованием MVC 4 в Visual Studio 2010. Я хочу сказать, что я не хочу использовать базу данных или любой другой внешний хранилище данных даже в репозитории.Класс In-Memory без использования базы данных

Я хочу хранить данные, извлекать данные из этого класса.

Я слышал о «кешировании», но у него есть свои ограничения.

Я также не использую какие-либо репозитории, потому что, используя репозиторий, я уже использовал http://www.edandersen.com/2013/05/30/asp-net-mvc-basics-part-2-viewmodel-to-model-mapping-and-editing/.

Итак, можете ли вы предложить мне, как это сделать?

ответ

1

Какую цель?

Если данные важны для сохранения, их нельзя хранить в памяти. Приложения IIS могут перезагружаться в любое время по многим причинам. Затем данные теряются без предупреждения.

Если данные предназначены как кэш, то они действительно используют кеш или статическую переменную (с надлежащей синхронизацией).

+1

Это хороший ответ (хотя OP никогда не упоминалось IIS). Здесь обсуждается информация о хранении информации для игры - это один из типов сценариев, где вы не можете использовать базу данных, хотя они все равно рекомендуют использовать файл для хранения: http://www.codeproject.com/Questions/486416/Howplustoplussaveplusdataplusinplusc -pluswithout. Если вы используете фон WebForms и хотите использовать механизм типа ViewState, просмотрите http://stackoverflow.com/questions/2230519/asp-net-c-sharp-mvc-how-do-i-live- without-viewstate –

+0

Для очень высокой пропускной способности я бы, вероятно, сохранил все данные в памяти, потому что нет никакого способа сделать что-то еще. Это вызывает головные боли при развертывании или времени исправления. Для игры с низкой пропускной способностью я бы использовал постоянное хранилище данных, чтобы ни одна из этих проблем не вступила в игру. – usr

0

Вы можете использовать экземпляр статического объекта. Например, допустим, что у вас есть User класс:

public class User 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

, а затем иметь статический контейнер для лиц:

public static class Container 
{ 
    static Container() 
    { 
     Users = new ConcurrentBag<User>(); 
    } 

    public static IEnumerable<User> Users { get; set; } 
    ... 
} 

И тогда вы можете получить доступ к статический экземпляр из любого места в коде. Очевидно, что поскольку ASP.NET MVC представляет собой многопоточную среду, вам необходимо правильно синхронизировать доступ к этим переменным. Например, используя ConcurrentBag<User> вместо реализации List<User>.

, а затем в контроллере вы можете получить доступ к в-памяти хранилища данных:

public ActionResult Index(int id) 
{ 
    var user = Container.Users.FirstOrDefault(x => x.Id == id); 
    if (user == null) 
    { 
     return HttpNotFound(); 
    } 

    return View(user); 
} 
Смежные вопросы