[C#] NHibernate Mapping one-to-one

Iniciado por n-utz, 8 Abril 2018, 03:40 AM

0 Miembros y 1 Visitante están viendo este tema.

n-utz

Buenas,

Hace mucho no posteo en el foro, pero siempre va a ser mi última opción cuándo no encuentre la información en ningún otro lado o no pueda entender conceptos..

Vengo ahora con un problema de mapeos, estoy desarrollando un sistemita, para uso personal, donde voy a registrar las deudas o deudores que tengo.

Les paso código, que explica más que mil palabras:


    public class Person
    {
        protected virtual long Id { get; set; }
        protected virtual string Name { get; set;  }
        protected virtual string Nickname { get; set; }
        protected virtual string Surname { get; set; }

        public Person() { }

        public Person(string name, string nickname, string surname)
        {
            Name = name;
            Nickname = nickname;
            Surname = surname;
        }
    }



    public abstract class Transaction
    {
        protected virtual long Id { get; set; }
        protected virtual float OriginalAmount { get; set; }
        protected virtual float RemainingAmount { get; set; }
        protected virtual string Detail { get; set; }
        protected virtual DateTime Stamp { get; set; }
        protected virtual Person Person { get; set; }

        protected Transaction() { }

        protected Transaction(float originalAmount, string detail, Person person)
        {
            OriginalAmount = originalAmount;
            RemainingAmount = originalAmount;
            Detail = detail;
            Stamp = DateTime.Now;
            Person = person;
        }
    }

   public class Asset : Transaction
    {
        public Asset() { }

        public Asset(float originalAmount, string detail, Person person) :
            base(originalAmount, detail, person) { }
    }


Como es un sistema para mi, solo me centro en las transacciones que se producen y no en las personas, aunque quiero tenerlas registradas. Debido a esto, cada transacción tiene que estar registrada a una persona (clase Person).
Al registrar una transacción, si o si, debe estar asociada a una persona.

Vamos a la BD:


Table - Person

Id - bigint
Name - varchar(50)
Nickname - varchar(50)
Surname - varchar(50)



Table - Asset

Id - bigint
OriginalAmount - float
RemainingAmount - float
Detail - varchar(50)
Stamp - Date
PersonId - bigint (fk a Person.Id)


Ahora a los mapeos, el error que estoy teniendo es que no inserta el PersonId correspondientemente, lo intenta insertar como null y al tenerlo no nullable me rompe.

  <class name="Person">
    <id name="Id">
      <generator class="native"/>
    </id>

    <property name="Name"/>
    <property name="Nickname"/>
    <property name="Surname"/>
  </class>


  <class name="Asset">
    <id name="Id">
      <generator class="native"/>
    </id>

    <property name="OriginalAmount"/>
    <property name="RemainingAmount"/>
    <property name="Detail"/>
    <property name="Stamp"/>

    <one-to-one name="Person"
                constrained="true"
                foreign-key="none"
                property-ref="Id"
                class="Person" />
  </class>



Si les soy sincero, soy nuevo con NHibernate, me he copiado varios mapeos one-to-one y ninguno me funcionó. Siento que mi relación de clases no es consistente con mi relación de BD.
Si me pueden orientar fantástico.

Saludos y gracias!