【问题标题】:How can i save multiple collections with some common data to database?如何将包含一些常见数据的多个集合保存到数据库?
【发布时间】:2019-09-30 06:42:32
【问题描述】:

我正在尝试保存集合,其中包含所有集合的部分通用数据和每个集合的不同部分。我编写了硬编码方式来保存一个集合,但我不知道如何为多个集合做到这一点。所以这就是我所拥有的:

控制器:

[HttpPost]
public ActionResult MakeComplaint(CommonData model)
{
    if (ModelState.IsValid)
    {                    
        model.CreateComplaint();
        return RedirectToAction("Index");
    }
}

型号:

public class CommonData
{
    public string Data1 { get; set; }
    public string Data2 { get; set; }
    public List<DifferentData> Differents { get; set; }

    SecondModel DataContainer()
    {  //help needed here
        SecondModel tmp = new SecondModel();
        tmp.ID = Differents[0].ID;       //how can I change it to save more collections?
        tmp.Name = Differents[0].Name;

        tmp.Data1 = Data1;
        tmp.Data2 = Data2;

        return tmp;
    }

    public int CreateComplaint()
    {
        var complaint = DataContainer();
        db.AddComplaint(complaint);
        db.Save();
    }
}

public class DifferentData
{
    public int ID { get; set; }
    public string Name { get; set; }
}

我的DataContainer() 应该如何处理Differents[1] 等等?

编辑: 我的DataContainer() 现在是一个对象列表,所以解决了 1 个问题

List<SecondModel> DataContainer()
    {   
        var listOfComplaints = new List<SecondModel>;
        for(int i = 0; i<Differents.Count; i++){
        SecondModel tmp = new SecondModel();
        tmp.ID = Differents[i].ID; 
        tmp.Name = Differents[i].Name;

        tmp.Data1 = Data1;
        tmp.Data2 = Data2;
        listOfComplaints.Add(tmp)
        }
        return listOfComplanints;
    }

EDIT2: 工作解决方案:

public void AddComplaint(List<SecondModel> model){
db.SecondModels.InsertAllOnSubmit(model) //saving multiple objects
}

【问题讨论】:

  • 你必须实例化你想要声明的每一个不同的对象,尽管它们有共同的值,以便它引用内存中的不同对象
  • 什么样的数据库?关系型(如 SQL Server、MySQL、SQLite ...)还是 NoSQL(例如 MongoDB 等文档数据库)?如果一个或另一个,这可能必须以不同的方式回答。
  • @Fildor SQL Server,我的代码正在处理 1 个集合,我将值保存在数据库中,但我不知道如何修改 DataContainer() 以处理更多集合

标签: c# sql asp.net-mvc database collections


【解决方案1】:

通常您会从页面获得新模型。不是作为 DataContainer 而是作为 SecondModel 或其他特定模型。您的 DataContainer 和 CommonData 中的嵌套类可能会增加混乱。您实际上可以删除所有这些,并直接从控制器中使用 AddComplaint 中的代码,如下所示:

[HttpPost]
public ActionResult MakeComplaint(SecondModel model)
{
    if (ModelState.IsValid)
    {                    
        db.SecondModels.InsertOnSubmit(model)
        return RedirectToAction("Index");
    }
}

然后为另一个模型做类似的事情:


[HttpPost]
public ActionResult MakeSomethingElse(ThirdModel model)
{
    if (ModelState.IsValid)
    {                    
        db.ThirdModels.InsertOnSubmit(model)
        return RedirectToAction("Index");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2014-11-04
    • 1970-01-01
    相关资源
    最近更新 更多