6

Ben feryat şemada gösterildiği gibi DDD ve Depo Desen uygulayan bir uygulama geliştiriyorum:Kalıcı Cahil Alan

Ben cahil kalıcı benim Alan Katmanı saklamak istedikleri My Software Architecture

, bu yüzden Orada varlık çerçeve kütüphaneleri kurmak istemem. Karşılaştığım tek sorun benim uygulamamın mekansal veri kullanmasıdır, ancak EntityFramework derlemesinden System.Data.Entity.Spatial ad alanına girdiğimde, DbGeography'yi benim varlıkların Mülk Türü olarak kullanmamam gerekiyor. Böyle

Alan katmanındaki enlem, boylam ve yükseklik değerlerini tutacak bir sınıf oluşturmak için bir yol var mı

:

public class Location 
{ 
    public double Latitude { get; set; } 
    public double Longitude { get; set; } 
    public double Elevation { get; set; } 
} 

sonra benim Depo Katmanı DbGeography için o sınıfı dönüştürmek?

public class Place : IEntityBase, ILocalizable 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Location Location { get; set; } 
    public User Owner { get; set; } 
} 

ve bunu mekansal veri devam ve sadece depo katmanında bazı hesaplamalar yapmaya DbGegraphy dönüştürmek istiyorum: Bir başka deyişle

, alan kişiler bir özelliği olarak tek Konum sınıfını olurdu. Planlarım dönüştürmek için böyle bir şey denemek oldu:

public class LocationMap : ComplexTypeConfiguration<Location> 
{ 
    public LocationMap() 
    { 
     Property(l => DbGeography.FromText(string.Format("POINT({0} {1})", l.Longitude, l.Latitude))).HasColumnName("Location"); 
     Ignore(l => l.Elevation); 
     Ignore(l => l.Latitude); 
     Ignore(l => l.Longitude); 
    } 
} 

Ama işe ve asla gelmez. Bu sorunu nasıl çözebilirim? Bu durumda en iyi uygulamalar nelerdir?

i zor bir fikrim yok, sen

+0

Merhaba @GertArnold, lütfen bir göz atın https://msdn.microsoft.com/pt-br/library/system.data.spatial.dbgeography(v=vs.110).aspx. –

+0

Güzel uygulama mimarisi, BTW –

+0

'Sistem .Data.Spatial' bir .Net ad alanıdır. –

cevap

0

Eh, "doğru" yolunu bilmiyorum ederim, ama. Umarım, size yardımcı olur veya daha fazla çeşitlilik verir: Ypu, alan varlıkları Place'a sahiptir, tamamen kalıcı bilgisizdir ve Etki Alanı derlemesindeki yeridir. İyi. Biz tasarruf üzerinde EFPlace için Place'ten dönüştürmek zorunda

public class PlaceMap : ComplexTypeConfiguration<EFPlace> 
{ 
    public PlaceMap() 
    { 
     Property(p => p.EFLocation).HasColumnName("Location"); 
     Ignore(p => p.Location); 
    } 
} 

Ama: Biz Entity Framework için özel sınıf oluşturuldu

internal sealed class EFPlace : Place 
{ 
    DbGeography EFLocation 
    { 
     get 
     { 
      return DbGeography.FromText(string.Format("POINT({0} {1})", Location.Longitude, Location.Latitude); 
     } 
     set 
     { 
      //vice versa convertion, I don't know, how to do it :) 
     } 
    } 
} 

ve eşlemek: Depo mecliste bir daha Yeri sınıf oluşturmak Lets deposu. Özel kurucu veya döküm yöntemi oluşturabilirsiniz. başka varyant - Domain ve havuz montajları kısmi sınıfı yer oluşturur. Ve Repository bir sınıfta vb. Eh, çirkin görünüyor :(ama, biliyorum "saf" yok, Kalıcı Cahil Domain gerçek yaşam örnekleri. Biz her zaman Entity Framework sınırlamalara sahiptir. NHibernate biraz daha özelliğe sahiptir.