Veritabanındaki görünüm tarafından temsil edilen bir EF öğesine, saklı yordamın eşlenmesiyle ilgili bir sorunum var.Kayıtlı yordamları görünümlere eşleme
Aramaya denerseniz, örneğin, bir .Add
yöntemi - EF tüm parametreleri istediği,
Çok fazla parametre hatası ... G/anlayabiliyorum
olsun eşlenen Eklenti saklı yordamındaki anahtarlar (+ bilgisayar) dışında. Ancak "varlık = görünüm" durumunda, saklı yordam parametrelerini yalnızca db tablosunda bulunan bazı EF varlık alanları kümesini yüklemek istiyorum (ekleme durumunda bir alan, güncelleme durumunda başka bir set , silme durumunda üçüncü set).
Bu "nasıl yapılır?" Nasıl yapılır? DB
Görünüm ..
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: .edmx
yılında ..
Örnek bu (grafik arayüz üzerinden eşleme) mükemmel çalışıyor ama kod birinci eliyle bu davranışı gerçekleştirmek için gereken varlık
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; }
}
Haritalama ..
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"));
});
012 veritabanında
takın saklı yordam:
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;
Depolanan proc eşlemlerinizi tanımladığınızda, her kayıtlı proc için parametreleri tanımlamak için daha fazla seçenek var mı? – Brad
Bunu açıklamaya çalıştım ama aynı hatayı aldım. s.Insert (i => i.HasName ("udp_Department_ins") .Parametre (e => e.ParentID, "Ebeveyn Kimliği") .Parametre (e => e.Code, "Kod") .Parametre (e => e.Sayı, "SName") .Parameter (e => e.Adı, "Ad") .Parametre (e => e.CloseDate, "CloseDate") .Result (r => r.ID "NewID") ); – Valerdos
Kod ilk yaklaşımı bir veritabanına ilk sisteme zorlamaya çalışıyorsunuz. Benim deneyimlerimde varlıkları görüş haritalama her zaman tek yönlü olmuştur (POCO'lar için veritabanı) ve saklı provaları kullanarak ekler, güncellemeler veya silmeler içermez. Yalnızca eklediğiniz depolanmış proc'unuzun parametrelerini eşlemek için POCO içeren özellikler oluşturmanızı öneririm.Ancak, bu kod ilk yol değildir ve veri katmanınıza gereksiz bir karmaşıklık katar. – Brad