ストアドプロシージャをデータベースのビューで表されるEFエンティティにマッピングする際に問題があります。ストアドプロシージャをビューにマッピングする
私は、例えば、.Add
メソッドを呼び出そうとした場合 - エラーに
を取得するパラメーターが多すぎます...
私はEFでのすべてのパラメータを望んでいることを、/理解して知っていますエンティティは、マップされたAdd - ストアドプロシージャのキー(+計算)を除きます。しかし、 "entity = view"の場合、私はストアドプロシージャのパラメータとして、私はdbテーブル(挿入の場合は1つのフィールドセット、別のセットの場合は更新、削除の場合は3番目のセット)。
これを行う方法「正しい」ですか? .edmx
でこの(グラフィックインターフェースを介してマッピングは)完璧に動作しますが、私は手でコード-最初にこの動作を実現する必要がある。..
例:DB内
ビュー..
CREATE VIEW vDepartment
AS
SELECT
d.*,
dp.Code as ParentCode, dp.SName as ParentSName,
dp.Name as ParentName
FROM
Department d
LEFT OUTER JOIN
Department dp ON d.ParentID = dp.ID
EFエンティティ
public partial class vDepartment
{
public long ID { get; set; }
public Nullable<long> ParentID { get; set; }
public string Code { get; set; }
public string SName { get; set; }
public string Name { get; set; }
public Nullable<System.DateTime> CloseDate { get; set; }
public string ParentCode { get; set; }
public string ParentSName { get; set; }
public string ParentName { get; set; }
}
マッピング..
modelBuilder.Entity<vDepartment>().MapToStoredProcedures(s =>
{
s.Update(u => u.HasName("udp_Department_upd"));
s.Delete(d => d.HasName("udp_Department_del"));
s.Insert(i => i.HasName("udp_Department_ins").Result(r => r.ID, "NewID"));
});
挿入データベースにストアドプロシージャ:
CREATE PROC [dbo].[udp_Department_ins]
@ParentID BIGINT,
@Code NVARCHAR(20),
@SName NVARCHAR(50),
@Name NVARCHAR(100),
@CloseDate DATE
AS
BEGIN
DECLARE @NewID bigint;
INSERT INTO Department...
SELECT @NewID AS NewID;
END;
ストアドプロシージャを定義するときに、ストアドプロシージャごとにパラメータを定義するオプションが増えますか? – Brad
私はそのように説明しようとしましたが、同じエラーがあります。 (e => e.Code、 "Code") .Parameter(e => e.ParentID、 "ParentID") .Parameter(e => e.Code、 "Code")。 => e.SName、 "SName") .Parameter(e => e.Name、 "Name") .Parameter(e => e.CloseDate、 "CloseDate") 。Result(r => r.ID 、 "NewID") ); – Valerdos
データベースの最初のシステムにコードを最初に近づけようとしています。私の経験では、エンティティへのビューのマッピングは常に一方向(POCOのデータベース)であり、ストアドプロシージャを使用した挿入、更新、または削除は含まれていません。私は、あなたの挿入された挿入procのパラメータだけをマッピングするプロパティを含むPOCOを作成することを提案します。しかし、これはコードの最初の方法ではなく、不要な複雑さをデータレイヤに追加します。 – Brad