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.