Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/12/2014, 06:59
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Fluent Api: No se inserta un ID en una entidad que tiene relación.

Hola foreros !!!

Tengo un pequeño problema con Fluent Api con Code First, y espero puedan ayudarme a resolverlo, por que no entiendo que estoy haciendo mal.

Estoy creando el diseño para tres tablas: UsersBase, Customers, Managers

Tanto Customers, como Managers deben llevar el Id de un UserBase ya creado.

Para ello creo estas entidades:

Código:
    /// <summary>
    /// Clase que representa los datos básicos de un usuario.
    /// </summary>
    [DataContract]
    public class UserBase : EntityBase
    {

        public UserBase() : base() { }

        /// <summary>
        /// Login
        /// </summary>
        [DataMember]
        public string Login { get; set; }

        /// <summary>
        /// Clave
        /// </summary>
        [DataMember]
        public string Password { get; set; }

        /// <summary>
        /// Correo electrónico del usuario.
        /// </summary>
        [DataMember]
        public string Email { get; set; }

        public virtual ICollection<Customer> CustomerList { get; set; }

        public virtual ICollection<Manager> ManagerList { get; set; }
    }



    /// <summary>
    /// Clase que representa la información de un cliente.
    /// </summary>
    [DataContract]
    public class Customer : EntityBase
    {

        public Customer() : base() { }

                
        /// <summary>
        /// Nombre
        /// </summary>
        [DataMember]
        public string Name { get; set; }

        /// <summary>
        /// Apellidos
        /// </summary>
        [DataMember]
        public string LastName { get; set; }

        /// <summary>
        /// Fecha de nacimiento
        /// </summary>
        [DataMember]
        public DateTime? BirthDate { get; set; }

        /// <summary>
        /// Propiedad que contiene los datos del usuario relacionado con Login.
        /// </summary>
        [DataMember]
        public virtual UserBase UserBase { get; set; }

        /// <summary>
        /// Lista de direcciones que tiene el Usuario
        /// </summary>
        [DataMember]
        public virtual ICollection<Address> AddressList { get; set; }

        /// <summary>
        /// Lista de pedido.
        /// </summary>
        [DataMember]
        public virtual ICollection<Order> OrderList { get; set; }
    }



    /// <summary>
    /// Clase que representa la información de un usuario de la aplicacion.
    /// </summary>
    [DataContract]
    public class Manager : EntityBase
    {

        public Manager() : base()
        {

            RoleList = new List<Library.Domain.Entities.Role>();
        }


        /// <summary>
        /// Nombre
        /// </summary>
        [DataMember]
        public string Name { get; set; }


        /// <summary>
        /// Propiedad que contiene los datos del usuario relacionado con Login.
        /// </summary>
        [DataMember]
        public virtual UserBase UserBase { get; set; }


        /// <summary>
        /// Lista de Roles que contiene el manager
        /// </summary>
        [DataMember]
        public virtual ICollection<Role> RoleList { get; set; }
    }

Bien... el caso es que se crean las tablas, y parece que todo está correcto. Pero.. en las tablas Managers y Customers se me está creando el UserBase_Id (FK, uniqueidentifier, null)

Por que sale eso ?? No debería ser NOT NULL ???

Y claro... cuando creo los registros, ese campo aparece como null en la base de datos, en vez de salir el ID del UserBase creado y relacionado.

Código:
                //*****************************
                //USUARIO BASE
                //*****************************
                Library.Domain.Entities.UserBase objUser = new Library.Domain.Entities.UserBase { Email = "sdafsf", Login = "log", Password = "pass" };
                context.UsersBase.Add(objUser);


                //*****************************
                //USUARIO CUSTOMER
                //*****************************
                Library.Domain.Entities.Customer objCustomer = new Library.Domain.Entities.Customer
                {
                    Name = "customer",
                    LastName = "lastname customer",
                    BirthDate = DateTime.Today,
                    UserBase = objUser
                };
                context.Customers.Add(objCustomer);

                //*****************************
                //Manager
                //*****************************
                Library.Domain.Entities.Manager objManager = new Library.Domain.Entities.Manager
                {
                    Name = "carlos",
                    CreationDate = DateTime.Today,
                    LastModificationDate = DateTime.Today,
                    UserBase = objUser
                };
                objManager.RoleList.Add(objRole);
                context.Managers.Add(objManager);

En fin... espero podáis ayudarme, por favor.
__________________
Charlie.

Última edición por chcma; 18/12/2014 a las 07:55