что не так с этим методом вставки в asp.net mvc? - PullRequest
0 голосов
/ 03 мая 2010

Мой контроллер вызывает метод класса репозитория при вставке,

 [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' ..

я что-то упустил?

Ответы [ 2 ]

1 голос
/ 03 мая 2010

Объект, который вы передаете InsertOnSubmit, должен быть одним из ваших классов LINQ-to-SQL.

В этом случае вы пытаетесь вставить объект типа, о котором LINQ-to-SQL понятия не имеет (один из ваших бизнес-объектов, а не тип 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;
}

Неявный приведенный код (метод добавлен в класс Business Object)

public static implicit operator CrMVC.Models.Material
    (CrMVC.BusinessObjects.MaterialsObj)
{
    // Add conversion code here
}
0 голосов
/ 03 мая 2010

вы можете добавить db.SubmitChanges () для фиксации изменений

...