El nhibernato fluido ignora la propiedad dentro del ClaseMap, utilizando mapas de fluidez -- # campo con nhibernate campo con orm campo con fluent-nhibernate camp Relacionados El problema

Fluent NHibernate ignore property inside the ClassMap, using FluentMappings


3
vote

problema

Español

Estoy usando NHIBERNATE 3.1 y fluido NHibernate como orm en mi proyecto. Necesito tener una propiedad de un Poco ignorado por nhibernato con fluidez. Al principio, mi publicación puede verse como duplicado exacto de Esta pregunta , pero no lo es.

Mis complicaciones son lo primero del hecho de que los POCOS se definen en un ensamblaje diferente al de la asignación y estoy usando Mappings fluidos para mis Pocos. Tengo un requisito adicional para no escribir el código de propiedad, donde se realiza la configuración de la fábrica de la sesión (esto sucede en un lugar centralizado fuera de los módulos), pero como parte del módulo que define las asignaciones. Idealmente, creo que el lugar correcto sería la implementación de concreto $post = [ 'username' => 'user1', 'password' => 'passuser1', 'gender' => 1, ]; $ch = curl_init('http://localhost/laravel/arax_v1/paytm/callback'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'location: http://localhost/laravel/arax_v1/paytm/callback' )); // execute! $response = curl_exec($ch); // close the connection, release resources used curl_close($ch); 1 , ya que sabe exactamente cómo describir un POCO al ORM.

Sin embargo, estoy atrapado en esto principalmente porque este es mi primer impacto con el nhibernate y su API fluida. Hasta ahora, tengo una gran impresión de sus capacidades y extensibilidad, y espero que haya una manera de lograr mi requisito de una manera que el código relacionado con el mapeo esté encapsulado en su módulo correspondiente.

Aquí está mi configuración, desde un lugar centralizado:

  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();   

Utilizo asignaciones de clase estándar que heredan de 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();     } }   
Original en ingles

I am using NHibernate 3.1 and Fluent NHibernate as ORM in my project. I need to have a property of a POCO ignored by Fluent NHibernate. At first, my post might look as exact duplicate of this question, but it is not.

My complications come first from the fact that the POCOs are defined in a different assembly than the mapping and I am using fluent mappings for my POCOs. I have additional requirement not to write ingore-property code where the session factory configuration takes place (this happens at a centralized place outside the modules), but as part of the module that defines the mappings. Ideally, I believe the right place would be the concrete ClassMap implementation, since it knows exactly how to describe a POCO to the ORM.

However, I am stuck on this mainly because this is my first impact with NHibernate and its fluent API. Up to now I am having very good impression of its capabilities and extensibility, and I hope there is a way to achieve my requirement in a way that the mapping related code is encapsulated in its corresponding module.

Here is my configuration, from a centralized place:

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(); 

I use standard class mappings that inherit from 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();     } } 
           
       
       

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

Creo que tiene razón que el menu_ingredient0 es el mejor lugar para ignorar esta propiedad.

Ejemplo:

  menu_ingredient111  

Documentación: https://github.com/jagregy/ fluido-nhibernate / wiki / mapeo automático # ignorar-propiedades

En la medida en que las asignaciones de otra asamblea, debe ser tan fácil como algo así (dependiendo de su configuración actual):

  menu_ingredient2  
 

I think you are right that the ClassMap is the best place to ignore this property.

Example:

.Override<Shelf>(map =>   {     map.IgnoreProperty(x => x.YourProperty); }); 

Documentation: https://github.com/jagregory/fluent-nhibernate/wiki/Auto-mapping#ignoring-properties

As far as getting the mappings from another assembly, it should be as easy as something like this (depending on your current configuration):

.Mappings(m =>               {                   m.FluentMappings.AddFromAssemblyOf<ProvideClassFromYourOtherAssembly>();               }); 
 
 
         
         
5
 
vote

Sé que esta publicación es poco vieja, pero publico de todos modos desde que no encontré ninguna publicación de hastadato sobre el tema. Supongo que la forma más fácil debe ser agregar un atributo a cada propiedad, no queremos ser persistidos en una mesa. Al agregar una extensión que verifique si tiene por ejemplo. tiene un [noencia] adhirte.

  /// <summary> /// Tells a single Property to not be persisted to table. /// </summary> public class NoEntity : Attribute { }       /// <summary> /// Extension to ignore attributes /// </summary> public static class FluentIgnore {     /// <summary>     /// Ignore a single property.     /// Property marked with this attributes will no be persisted to table.     /// </summary>     /// <param name="p">IPropertyIgnorer</param>     /// <param name="propertyType">The type to ignore.</param>     /// <returns>The property to ignore.</returns>     public static IPropertyIgnorer SkipProperty(this IPropertyIgnorer p, Type propertyType)     {         return p.IgnoreProperties(x => x.MemberInfo.GetCustomAttributes(propertyType, false).Length > 0);     } }   

y en la configuración de configuración fluida:

              return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration();   
 

I know this post is bit old, but I post anyway since I didn't find any up todate posts on the subject. I guess the easiest way should be to add an attribute to each property we dont want to be persisted to a table. By add a extension that check if it has for eg. has a [NoEntity] attibute.

/// <summary> /// Tells a single Property to not be persisted to table. /// </summary> public class NoEntity : Attribute { }       /// <summary> /// Extension to ignore attributes /// </summary> public static class FluentIgnore {     /// <summary>     /// Ignore a single property.     /// Property marked with this attributes will no be persisted to table.     /// </summary>     /// <param name="p">IPropertyIgnorer</param>     /// <param name="propertyType">The type to ignore.</param>     /// <returns>The property to ignore.</returns>     public static IPropertyIgnorer SkipProperty(this IPropertyIgnorer p, Type propertyType)     {         return p.IgnoreProperties(x => x.MemberInfo.GetCustomAttributes(propertyType, false).Length > 0);     } } 

And in the fluent config setup:

            return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration(); 
 
 
   
   
0
 
vote

no lo hará justin. Esta es la cosa con esta extensión. Solo la propiedad que desea se ignora.

  public class Person : IEntity{   public virtual string Name{..}  public virtual string Lastname{..}   [NoProperty]  public virtual string FullName{ // Not created property   get { return Name +  " " + Lastname;  }  } }  public class Group : IEntity{   public virtual string FullName{..} //Created property }   
 

Will not Justin. This is the thing with this extension. Just the property you want gets ignored.

public class Person : IEntity{   public virtual string Name{..}  public virtual string Lastname{..}   [NoProperty]  public virtual string FullName{ // Not created property   get { return Name +  " " + Lastname;  }  } }  public class Group : IEntity{   public virtual string FullName{..} //Created property } 
 
 

Relacionados problema

5  Evite especificar la columna de claves en un escenario doble enlazado  ( Avoid specifying key column in double linked scenario ) 
Supongamos que tengo las siguientes dos clases: public class User : Entity { public virtual IList<Item> Items { get; set; } } public class Item : Enti...

6  ¿Cómo configurar el acceso predeterminado a Field.CamelCase-Subscore usando el NHibernato con fluidez?  ( How to set default access to field camelcase underscore using fluent nhibernate ) 
Me gustaría establecer esta convención en todo el mundo si es posible. ...

0  Configure con fluidez la base de datos de acceso con NHibernate  ( Fluently configure access database with nhibernate ) 
La siguiente configuración es lanzar una excepción con un mensaje interno que dice "No se pudo compilar el documento de asignación". return Fluently.Config...

32  Cómo resolver "La actualización por lotes devolvió la actualización inesperada de la fila desde la actualización; Recuento de fila real: 0; esperado: 1 "problema?  ( How to solve batch update returned unexpected row count from update actual row ) 
Obteniendo esto cada vez que intento crear una entidad en particular ... solo quiero saber cómo debo seguir averiguar la causa. Estoy usando automáticamente...

1  Schemaexport con fluentnhibernate  ( Schemaexport with fluentnhibernate ) 
¿Hay algo malo con este código? No estoy recibiendo nada generado y no se arrojan excepciones. public static void ExportSchema() { Co...

4  Cadena de conexión para NHibernate con fluidez con MySQL  ( Connection string for fluent nhibernate with mysql ) 
He revisado la publicación Cómo configurar el nhibernato fluido con MySQL , pero soy relativamente nuevo en MySQL y necesito configurar realmente con la cade...

1  FluentnhiberNate: Mapeo de una propiedad INT Nulable  ( Fluentnhibernate mapping a nullable int version property ) 
¿Cómo mapeo una propiedad de la versión usando convenciones (por ejemplo, iclassconvention, automapperconfiguration)? public abstract class Entity { .....

88  ¿Cómo se ocupa un enum como un valor INT con nhibernato con fluidez?  ( How do you map an enum as an int value with fluent nhibernate ) 
La pregunta lo dice todo realmente, el incumplimiento es para que se mapee como un string pero lo necesito para mapear como un int . Actualmente estoy us...

1  ¿Cómo escribir consultas con fluidez nhibernate?  ( How to write fluent nhibernate queries ) 
Soy nuevo en nhibernato fluido y generalmente nhibernate. Busqué mucho en la red, pero no pude encontrar una buena ayuda. Estoy usando nhibernato con fluidez ...

5  Guía de nhibernato fluido y fechas  ( Fluent nhibernate checkproperty and dates ) 
Configura una prueba de nunit como tal: new PersistenceSpecification<MyTable>(_session) .CheckProperty(c => c.ActionDate, DateTime.Now); Cuando eje...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos