【问题标题】:what is wrong with this insert method in asp.net mvc?asp.net mvc 中的这种插入方法有什么问题?
【发布时间】:2010-05-03 12:54:10
【问题描述】:

我的控制器在插入时调用存储库类方法,

 [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create([Bind(Exclude = "Id")]FormCollection collection)
        {
            try
            {
                MaterialsObj materialsObj = new MaterialsObj();
                materialsObj.Mat_Name = collection["Mat_Name"];
                materialsObj.Mes_Id = Convert.ToInt64(collection["MeasurementType"]);
                materialsObj.Mes_Name = collection["Mat_Type"];
                materialsObj.CreatedDate = System.DateTime.Now;
                materialsObj.CreatedBy = Convert.ToInt64(1);
                materialsObj.IsDeleted = Convert.ToInt64(1);
                consRepository.createMaterials(materialsObj);

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

我的存储库类有这个,

public MaterialsObj createMaterials(MaterialsObj materialsObj)
{
    db.Materials.InsertOnSubmit(materialsObj);
    return materialsObj;
}

但是当我编译这个我得到The best overloaded method match for 'System.Data.Linq.Table<CrMVC.Models.Material>.InsertOnSubmit(CrMVC.Models.Material)' has some invalid arguments... cannot convert from 'CrMVC.BusinessObjects.MaterialsObj' to 'CrMVC.Models.Material'..

我错过了什么吗?

【问题讨论】:

    标签: asp.net-mvc insert formcollection


    【解决方案1】:

    您传递给 InsertOnSubmit 的对象必须是您的 LINQ-to-SQL 类之一。

    在这种情况下,您尝试插入 LINQ-to-SQL 不知道的类型的 Object(您的业务对象之一,而不是 LINQ-to-SQL 类型)。

    有几种方法可以克服这个问题。一次是将业务对象转换为存储库中适当的 LINQ-to-SQL 类。另一种是在两者之间创建一个隐式转换,让 .NET 处理其余部分。

    存储库转换代码

    public MaterialsObj createMaterials(MaterialsObj materialsObj)
    {
        CrMVC.Models.Material mat = new CrMVC.Models.Material();
    
        // copy properties to the Materials object from materialsObj
        db.Materials.InsertOnSubmit(mat);
    
        materialsObject.IdField = mat.IdField;
    
        return materialsObj;
    }
    

    隐式转换代码(添加到业务对象类的方法)

    public static implicit operator CrMVC.Models.Material
        (CrMVC.BusinessObjects.MaterialsObj)
    {
        // Add conversion code here
    }
    

    【讨论】:

    • @Justin 我确实有material LINQ-to-SQL 对象...我的存储库方法会是什么样子?请给我一些代码..
    • @justion 我不想要演员表...我想使用 Linq-to-sql 对象插入...MaterialId and all other properties
    • @Pandiya Chendu - 隐式转换将使框架将业务对象转换为您的 LINQ-to-SQL 对象(因此适当地插入 LINQ-to-SQL 对象)。
    【解决方案2】:

    您可能需要添加 db.SubmitChanges() 来提交更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-10
      • 2012-04-08
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      相关资源
      最近更新 更多