Başlığın mantıklı olup olmadığından emin değilim, ama işte yaptığım şey bu. Varlık Çerçeve Varlıklarımı DTO nesnelerine eşlemek için AutoMapper kullanıyorum veya tam tersi. Sorun DTO verilerini EF nesnesine eşlemeye çalıştığımda ortaya çıkıyor. EntityKey için mülk haritalama özelliği yok. Bunu düzeltmek için, aşağıdaki gibi bazı yapın: Ben 1 sınıf var olabilir bunu yapmanın daha genel bir yolu olup olmadığını merak ediyorumEF Entities için EntityKey değerlerini eşlemek için AutoMapper ValueResolver'ı kullanmanın genel bir yolu var mı?
public class VideoEntityKeyResolver : ValueResolver<VideoDTO, EntityKey>
{
protected override EntityKey ResolveCore(VideoDTO source)
{
EntityKey key = new EntityKey("EntityFrameworkTestingEntities.Videos",
"VideoId", source.VideoId);
return key;
}
}
: gibi
Mapper.CreateMap<VideoDTO, Video>()
.ForMember(dest => dest.EntityKey, opt =>
opt.ResolveUsing<VideoEntityKeyResolver>());
VideoEntityKeyResolver sınıf görünüyor Varlık Kümesi Adını, Anahtar Mülk Adını ve Anahtar Değerini bir yapıcıya alan bir kurucu ile.
DTO nesnelerinin oluşturulmasının tüm noktası olarak veri katmanımın bağlantısını uygulamamın geri kalanında ciddi bir şekilde çekmek için akışları geçmeye çok benzeyen DTO nesnelerime bir EntityKey özelliği eklemeyi düşündüm. .
Tamamen ilgisiz bir notta (gerekirse yeni bir soru oluşturabilirim), AutoMapper kullanırken eşlemlerimi tanımlamam gereken tam olarak nedir? Şu anda onu bağlam nesnesinin kurucusunda yapıyorum (bu benim EF deposu nesnemdir), ancak bunun oldukça maliyetli ve doğru değil, yine de işe yaradığını düşünüyorum.
'u arayın. Ayrıntılı yanıt için teşekkürler. Çoğu benim kafamın üzerinde, ama senden daha çok. Hala lambda'nın kullanımıyla güreşiyorum. Her nasılsa, bir mülke hesaplanmış bir değeri açıkça atamanıza izin veren bir otomatik haritalama yöntemi olup olmadığını biliyor musunuz? Bu durumda, gerekli parametrelere sahip bir EntityKey nesnesi oluşturabilir ve bu değeri varlığımdaki EntityKey özelliğine eşleyebilirim. MapMrom AutoMapper yöntemine bakmıştım, ama içine girmek için zamanım olmadı. – jason
Bunu daha basit bir yöntem olarak önereceğim, ancak sorunuzu doğrudan yanıtlamaya karar verdim. Bunu cevaba ekleyeceğim. (Ayrıca, ihtiyaçlarınızı karşılamak için bulursanız, cevap vermeyi ve/veya cevabı kabul etmeyi unutmayın) – mkedobbs
Bu soruya yukarıdan ve ötesine geçtiğiniz için teşekkür ederiz. Bu gerçekten bana yardımcı oldu! Devam ettim ve bir EntityKey mülküne eşleme yapmaya karar verdim ve işe yaramış gibi görünüyor. – jason