Fluent NHibernate ignorieren Immobilie innerhalb der ClassMap, mit FluentMappings
Bin ich mit NHibernate 3.1 und Fluent NHibernate als ORM in meinem Projekt. Ich brauche eine Eigenschaft von POCO ignoriert Fluent NHibernate. Auf den ersten, mein Beitrag Aussehen könnte, als exakte Kopie von diese Frage, ist es aber nicht.
Meine Komplikationen kommen zunächst aus der Tatsache, dass die POCOs definiert sind, in einer anderen assembly als die Zuordnung, und ich bin mit fluent-mappings für meine POCOs. Ich habe zusätzliche Anforderung nicht zu schreiben ingore-Eigenschaft code, wo die session-factory configuration " stattfindet (das passiert an einem zentralen Ort außerhalb der Module), sondern als Teil des Moduls definiert die Zuordnungen. Im Idealfall, glaube ich, der richtige Platz wäre die konkrete ClassMap
Umsetzung, da er genau weiß, wie zu beschreiben, POCO-der ORM.
Aber ich bin stecken geblieben auf diese vor allem, denn dies ist meine erste Aufprall mit NHibernate und seine fluent-API. Bis jetzt bin ich mit ganz guten Eindruck von seinen Funktionen und Erweiterbarkeit, und ich hoffe es gibt einen Weg, um meinen Bedarf in einer Weise, dass die mapping-bezogenen code gekapselt wird im entsprechenden Modul.
Hier ist meine Konfiguration, die von einem zentralen Ort:
List<Assembly> assemblies = GetModules().Select(x => x.GetType().Assembly).ToList();
ISessionFactory nhibernateSessionFactory = Fluently
.Configure()
.Mappings(m => assemblies.ForEach(asm => m.FluentMappings.AddFromAssembly(asm)))
.Database(
MsSqlConfiguration.MsSql2005
.ShowSql()
.ConnectionString(DatabaseConfig.Instance.ConnectionString))
.ExposeConfiguration(c => new SchemaUpdate(c).Execute(true, true))
.BuildSessionFactory();
Verwende ich standard-Klasse Zuordnungen, die Erben von ClassMap
:
public class User
{
public virtual int ID { get; set; }
public virtual String Username { get; set; }
public virtual String Password { get; set; }
public virtual DateTime DateCreated { get; set; }
public virtual DateTime DateModified { get; set; }
//Must ignore
public string ComputedProperty { get { ... } }
}
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("User");
Id(x => x.ID).GeneratedBy.Identity();
Map(m => m.Username).Not.Nullable().Length(255).UniqueKey("User_Username_Unique_Key");
Map(m => m.Password).Not.Nullable().Length(255);
Map(m => m.DateCreated).Not.Nullable();
Map(m => m.DateModified).Not.Nullable();
}
}
- Was macht Ihre Zuordnungen Klasse Aussehen und was sagt deine Konfiguration Aussehen?
- Griff ich auf meine Frage, indem Sie einige code
- Siehe auch: stackoverflow.com/questions/5830649/...
- Siehe auch: stackoverflow.com/questions/5830649/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie haben Recht, dass die
ClassMap
ist der beste Ort, um diese Eigenschaft ignorieren.Beispiel:
Dokumentation: https://github.com/jagregory/fluent-nhibernate/wiki/Auto-mapping#ignoring-properties
So weit wie immer die mappings aus einer anderen Versammlung, es sollte so einfach werden, wie so etwas (abhängig von Ihrer aktuellen Konfiguration):
.Override
und.Mappings
auf? Neben, link ist tot.ClassMap
?AutoMap.AssemblyOf<ClassInYourAssembly>().Override<YourEntity>(...)
Ich weiß, dieser post ist etwas alt, aber ich poste trotzdem, da ich keine aktuellen Beiträge zu dem Thema.
Ich denke, der einfachste Weg sollte sein, ein Attribut hinzuzufügen, um jede Eigenschaft, die wir nicht wollen, beibehalten werden, um eine Tabelle. Durch hinzufügen einer Erweiterung, die überprüfen, ob es für zB. hat eine [NoEntity] Standardtitel.
Und in der fluent-config-setup:
Nicht Justin. Das ist die Sache mit dieser Erweiterung. Nur die Immobilie, die Sie wollen, wird ignoriert.