2016-04-08 8 views
0

Ich bin eigentlich eine Website mit ASP.Net MVC mit NHibernate zu entwickeln.Sharding-Muster mit Nhibernate und Azure Blob für Binär

Sie können eine Probe von der Basis der Lösung finde ich auf GitHub verwenden: Pixel.Sample

I Repository für Bild habe NHibernate Microsoft SQL Einheit zu verwalten. Mein PictureManager ruft mein PictureRepository auf, um es zu speichern(). Ich möchte meine Binary für Bild und Thunbail in Azure CloudStorage Blob shard, also habe ich nicht das binäre Feld auf meiner ClassMap zugeordnet, sondern wie ich meine Save Update Delete in meiner aktuellen Architektur abfangen kann, um nur Binär in anderer Unterstützung zu speichern (CloudStorage)

Eigentlich versuche ich eine Lösung dafür, irgendwelche Ideen zu finden?

UPDATE

Nach der entsprechenden Antwort von Pelikan, ich glaube, ich LazyLoad mit Proxy verwenden werden Binary und Interceptor laden speichern/update/delete

Werfen Sie einen Blick auf meine answer

+0

Kennen Sie schon [diese] (/ q/14436050/1178314)? –

+0

Ja Frederic, aber dieser Fall ist nur in SQL Shard, in meinem Fall möchte ich meine Shard in AzureBlobStorage – Arnaud

Antwort

0

Sie NHibernate events,

public class TestInterceptor : EmptyInterceptor { 

    private int updates; 
    private int creates; 
    private int loads; 

    public override void OnDelete(object entity, 
            object id, 
            object[] state, 
            string[] propertyNames, 
            IType[] types) 
    { 
    } 

    public override bool OnFlushDirty(object entity, 
             object id, 
         object[] currentState, 
         object[] previousState, 
         string[] propertyNames, 
         IType[] types) 
    { 
    } 

    public override bool OnLoad(object entity, 
           object id, 
       object[] state, 
       string[] propertyNames, 
       IType[] types) 
    { 
    } 

    public override bool OnSave(object entity, 
           object id, 
       object[] state, 
       string[] propertyNames, 
       IType[] types) 
    { 
    } 

    public override void AfterTransactionCompletion(ITransaction tx) 
    { 
     if (tx.WasCommitted) { 
     } 
    } 
} 
verwenden könnenund Sie können es registrieren,

new Configuration().SetInterceptor(new TestInterceptor()); 
+0

Ich bin mir jetzt sicher, wie Blob Ausnahme in diesem Fall zu verwalten? – Arnaud

0

Pelikan Danke mir zu dieser Antwort zu helfen, fand ich genau das, was ich will:

NHibernate.Proxy.DynamicProxy.ProxyFactory

Auf IInterceptor .Instance, sollten Sie wählen, welche Klasse Sie Proxy setzen wollen

Und auf Intercept-Methode können Sie wh an Sie:

class CustomPictureInterceptor : NHibernate.Proxy.DynamicProxy.IInterceptor 
    { 
     public object Intercept(InvocationInfo info) 
     { 
      //Do what you want 
      return info.InvokeMethodOnTarget(); 
     } 
    } 

Referenzen:

http://weblogs.asp.net/ricardoperes/nhibernate-interceptor-for-dynamic-proxy-generation

http://kozmic.net/2011/03/20/working-with-nhibernate-without-default-constructors/