2009-12-22 13 views
7

2 tablom var, Table1 birincil 'CustomizationId' anahtarına sahip ve Table2'de buna karşılık gelen bir FK Customizationid var. Tablo 2'de birincil anahtar yoktur.ADO.Net Entity Modelinde bir tabloyu yabancı anahtarla başka bir tabloya nasıl güncelleştirirsiniz?

Web tabanlı bir formdan yeni bir kayıt eklemeye çalışıyorum. Ben veritabanına bu kaydetme girişiminde ve bir hata alıyorum: Ben yorumladı doğrultusunda eklemek olsun veya olmasın ben, bir hata alıyorum SaveChanges çağırdığınızda

  Customization customization = new Customization(); 
      Code code = new Code(); 
      customization.Name = CustomizationName.Text;    
      customization.LastUpdated = DateTime.Now; 

      code.Top = top_js.InnerText; 
      code.Bottom = bottom_js.InnerText; 

      //code.CustomizationId = customization.CustomizationId; 

      customization.Code = code;    
      entities.AddToCustomizations(customization); 
      entities.SaveChanges(); 

.

Unable to update the EntitySet 'Code' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation. 

Bu durumu nasıl ele alırım? Özelleştirmeye eklediğim aynı zamanda kodu eklemek istiyorum. 'Kod' tablosu, Özelleştirme tarafından ayarlanan PK/Kimlik olarak ayarlanan Customizationid değerine sahip olmalıdır.

Herhangi bir fikrin var mı?

cevap

7

EF ile ilgili olarak, PK'siz tablo, bir Görünümdür.

  1. küçük beyaz bir yalan söyle ve 'view' is a table
  2. Add modification functions (Ekle/Güncelleme/Sil) EF ikna böylece onları düzenleyebilirsiniz:

    Bu iki seçeneğiniz var demektir.

Genel ...

modifikasyon fonksiyonları prosedürleri saklanır, ancak veritabanına erişimi yoksa aslında SSDL doğrudan T-SQL ekleyebilir yani Her eylem (insert, güncelleme ve silme) için EDMX ait <StorageModel> elemanda böyle bir şey: gerektiği gibi size SSDL modifikasyon işlevlere sahiptir kez

<Function Name="InsertCode" BuiltIn="false" IsComposable="false" > 
     <CommandText> 
       INSERT dbo.TCode(ID, Name) VALUES (@ID, @Name) 
     </CommandText> 
     <Parameter Name="ID" Type="int" Mode="In" /> 
     <Parameter Name="ID" Type="nvarchar(max)" Mode="In" /> 
</Function> 

Eğer map them gerek böylece EF bunları kullanır söyledi.

Durumunuzda (1) önerilir.

Bu yardımcı olur umarım.

Cheers Alex

İlgili konular