【问题标题】:How to save data in C# ASP.NET MVC without using database?如何在不使用数据库的情况下将数据保存在 C# ASP.NET MVC 中?
【发布时间】:2018-11-08 19:56:46
【问题描述】:

我正在使用 Visual Studio 2017 应用 Code First 方法开发一个带有 ASP.NET MVC 的应用程序。我在模型中有三个类(表)和一个名为DataBase 的存储库和一个接口IDataBase

我正在尝试在不使用 db 的情况下将数据存储在内存中。我现在不知道如何在表格中添加新项目?

这是我的DataBase 类(存储库):

public class DataBase : IDataBase
{   
    private List<Proveedor> proveedors;
    private List<Factura> facturas;
    private List<FacturadeArticulo> facturadeArticulos;

    public DataBase()
    {
         this.proveedors = new List<Proveedor>();
         this.facturas = new List<Factura>();
         this.facturadeArticulos = new List<FacturadeArticulo>();
    }

    public Proveedor AddProveedor(Proveedor item)
    {
        // acces db
        if (item == null)  
        {  
            throw new ArgumentNullException("item");  
        }  

        proveedors.Add(item);  
        return item; 
   }
}

我的界面IDataBase

public interface IDatabase
{
    Proveedor Add(Proveedor item);
}

我的控制器

public ActionResult Create(Proveedor provedor)
{
        try
        {
            // TODO: Add insert logic here
            var data = this.db.Add(provedor);

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
}

我现在不知道如何在不使用数据库的情况下实现 Add 方法并将数据保存在内存中。

【问题讨论】:

  • 如果您将数据保存在内存中,只要 IIS 回收您的服务器进程,它就会消失。你需要一个数据库。
  • 试试litedb.org,同样的代码优先方法,免费,你的数据实际上已经保存了。
  • 看起来你有对象列表,是那些你想保存数据的地方吗?看起来您正在调用 .Add() 将元素添加到这些列表中。那么究竟是什么不起作用?
  • 数据库(存储库)中的方法不起作用。当我尝试创建新项目时,我没有任何错误,但我的 Proveedor 是空的。我正在使用库 Unity
  • 可能是空的,因为模型没有正确绑定?

标签: c# asp.net-mvc repository


【解决方案1】:

仅针对这种情况,实体框架不是为使用内存存储而设计的。

为此,您需要实现适当的 ADO.NET 提供程序:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/data-providers

【讨论】:

    【解决方案2】:
      /**You can Save Data in XML file**/
    
      //You can Save and load time by this method but it's slow process,
       it may crash if data is large and system is slow, it stores data runtime
       so takes RAM, its ok to use for few rows without any problem
    
      //use the collection for storing data runtime
        List<Person> pers = new List<Person>();
        public class Person
        {
          public string id { get; set; }//1
          public string name { get; set; }//2
          public string bilno { get; set; }//3
          public string mob { get; set; }//4
          public DateTime dt { get; set; }//5
        }  
    
    
        string path=@"c:\.....";
        void save()
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(path + @"\data.xml");
            XmlNode xnode = xdoc.SelectSingleNode("Items");
            xnode.RemoveAll();
    
            foreach (Person i in pers)
            {
                XmlNode xtop = xdoc.CreateElement("Item");
    
                XmlNode x1 = xdoc.CreateElement("a");
                XmlNode x2 = xdoc.CreateElement("b");
                XmlNode x3 = xdoc.CreateElement("c");
                XmlNode x4 = xdoc.CreateElement("d");
                XmlNode x5 = xdoc.CreateElement("e");
    
    
                x1.InnerText = i.id;
                x2.InnerText = i.name;
                x3.InnerText = i.bilno;
                x4.InnerText = i.mob;
                x5.InnerText = i.dt.ToFileTime().ToString();
    
                xtop.AppendChild(x1);
                xtop.AppendChild(x2);
                xtop.AppendChild(x3);
                xtop.AppendChild(x4);
                xtop.AppendChild(x5);
    
                xdoc.DocumentElement.AppendChild(xtop);
            }
            xdoc.Save(path + @"\data.xml");
        }
        void load()
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(path + @"\data.xml");
            foreach (XmlNode xnode in xdoc.SelectNodes("Items/Item"))
            {
                Person p = new Person();
                p.id = xnode.SelectSingleNode("a").InnerText;
                p.name = xnode.SelectSingleNode("b").InnerText;
                p.bilno = xnode.SelectSingleNode("c").InnerText;
                p.mob = xnode.SelectSingleNode("d").InnerText;
                p.dt = DateTime.FromFileTime(Convert.ToInt64(xnode.SelectSingleNode("e").InnerText));
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2018-03-08
      • 2014-10-21
      • 2021-04-10
      • 2018-06-20
      相关资源
      最近更新 更多