2009-07-06 1 views
0

Im Projekt arbeite ich jetzt auf der Karte, wir haben Klasse Basisentität die wie folgt aussieht: von Entity vererbenFluent NHibernate Auto Mapping Mit IDs vom Typ Objekt aus Basisentität Klasse

public abstract class Entity<T> where T : Entity<T> 
{ 
    public virtual object Id { get; protected set }  
    // Equals, GetHashCode overrides, etc... 
} 

Die meisten Klassen Die ID sollte der Spalte "int" in der SQL Server-Datenbank zugeordnet werden, mindestens eine muss jedoch "long" (bigint) zugeordnet werden.

Ist es möglich, die automatische FluentNH-Mapping-Konvention zu erstellen, um diese Objekt-IDs standardmäßig auf int zu mappen?
Dann könnten wir eine andere Konvention oder IAutoMappingOverride verwenden, um lange Ids zu behandeln.

Danke!

Antwort

0

Um meine eigene Frage zu beantworten ... Es ist möglich.

Sie können Konvention wie folgt definieren:

internal class PrimaryKeyConvention : IIdConvention 
{ 
    public bool Accept(IIdentityPart id) 
    { 
     return true; 
    } 

    public void Apply(IIdentityPart id) 
    { 
     if (<ID should be long>) 
      id.SetAttribute("type", "Int64"); 
     else 
      id.SetAttribute("type", "Int32"); 
    } 
} 
Verwandte Themen