Ich habe das Problem mit der Zuordnung einer gespeicherten Prozedur zu einer EF-Entität, die von der Ansicht in der Datenbank dargestellt wird.Zuordnen gespeicherter Prozeduren zu Sichten
Wenn ich zu nennen versuchen, zum Beispiel ein .Add
Verfahren - erhalten den Fehler
Zu viele Parameter ...
Ich weiß,/verstehen, dass EF alle Parameter der will Entity außer Schlüssel (+ berechnet) in der zugeordneten Add - Stored Procedure. Aber im Fall von "entity = view" möchte ich als gespeicherte Prozedurparameter nur einige Sätze von EF-Entitätsfeldern, die ich in der db-Tabelle habe (ein Feld für den Fall der Einfügung, ein weiterer Satz für den Fall der Aktualisierung) , dritter Satz im Falle des Löschens).
Wie macht man das "richtig"? In .edmx
diese (Abbildung über grafische Oberfläche) funktioniert perfekt, aber ich brauche dieses Verhalten in der Code-zuerst von Hand zu realisieren ..
Beispiel:
Blick in 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 Einheit
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; }
}
Mapping ..
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"));
});
Einfügen gespeicherte Prozedur in der Datenbank:
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;
Wenn Sie Ihre gespeicherten Proc-Mappings definieren, gibt es mehr Optionen, um die Parameter für jeden gespeicherten Proc zu definieren? – Brad
Ich habe versucht, so zu beschreiben, habe aber den gleichen Fehler. s.Insert (i => i.HasName ("udp_Department_ins") .Parameter (e => e.ParentID, "ParentID") .Parameter (e => e.Code, "Code") .Parameter (e => e.SName, "SName") .Parameter (e => e.Name, "Name") .Parameter (e => e.CloseDate, "CloseDate") .Ergebnis (r => r.ID "NewID") ); – Valerdos
Sie versuchen, den ersten Ansatz des Codes für ein erstes Datenbanksystem zu erzwingen. Meiner Erfahrung nach war die Zuordnung von Ansichten zu Entitäten immer unidirektional (Datenbank zu POCOs) und beinhaltete keine Einfügungen, Aktualisierungen oder Löschungen unter Verwendung von gespeicherten Procs. Ich schlage vor, ein POCO zu erstellen, das Eigenschaften enthält, um nur die Parameter Ihres eingefügten gespeicherten proc zuzuordnen.Dies ist jedoch nicht der erste Weg und fügt Ihrer Datenschicht unnötige Komplexität hinzu. – Brad