0

私のコントローラーは、挿入時にリポジトリクラスメソッドを呼び出します。

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

私は何かが足りないのですか?

4

2 に答える 2

1

渡すオブジェクトInsertOnSubmitは、LINQ-to-SQLクラスの1つである必要があります。

この場合、LINQ-to-SQLが認識できないタイプのオブジェクト(LINQ-to-SQLタイプではなく、ビジネスオブジェクトの1つ)を挿入しようとしています。

これを克服する方法はいくつかあります。1つは、ビジネスオブジェクトをリポジトリ内の適切なLINQ-to-SQLクラスに変換することです。もう1つは、2つの間に暗黙のキャストを作成し、残りを.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
}
于 2010-05-03T12:56:32.360 に答える
0

変更をコミットするためにdb.SubmitChanges()を追加することをお勧めします

于 2010-05-03T14:12:40.197 に答える