我有一个通过ADO.NET Entity Data Model选项与选项Code First from existing database连接的项目。
我正在尝试从名为CLCAR_MAE_USUARIOS
的用户实体创建一条新记录。在业务层中的模型MUsuario
上用以下代码创建时,通过映射名为DTOUsuario
的用户DTO
使用我的用户实体,然后使用mi用户回购将其保存在我的名为UsuarioRepo
的unitOfWOrk中,它没有保存任何内容。没有抛出错误,一切顺利,但是未创建寄存器。
PD:至此,我已经在unitOfWork的调用save方法之前调试了我的实体映射,并且该方法正确且完整,包括了权限列表。
public async Task<DTOUsuario> Guardar(DTOUsuario user)
{
bool accion = false;
crearUsuario(user);
return user;
}
private void crearUsuario(DTOUsuario user)
{
CLCAR_MAE_USUARIOS usuario = mapper.Map<DTOUsuario,CLCAR_MAE_USUARIOS>(user);
unitOfWork.UsuarioRepo.Create(usuario);
unitOfWork.Save();
}
我在unitOfWork和saveMethod中的存储库
private UsuarioRepo _UsuarioRepo = null;
public UsuarioRepo UsuarioRepo { get { if (this._UsuarioRepo == null) this._UsuarioRepo = new UsuarioRepo(this.context); return this._UsuarioRepo; } }
private Repository<CLCAR_PERMISOS_ESPECIALES> _PermisosRepo = null;
public Repository<CLCAR_PERMISOS_ESPECIALES> PermisosRepo { get { if (this._PermisosRepo == null) this._PermisosRepo = new Repository<CLCAR_PERMISOS_ESPECIALES>(this.context); return this._PermisosRepo; } }
public async Task Save()
{
try
{
await this.context.SaveChangesAsync(sess);
}
catch (Exception ex)
{
throw ex;
}
}
但是当我从AutoMapperConfiguration实用工具的属性中忽略渗透列表时,它可以正常工作,则用户实体将得到完美保存。
cfg.CreateMap<DTOUsuario, CLCAR_MAE_USUARIOS>()
.ForMember(dest => dest.USU_FECHA_CREACION_USUARIO, act => act.Ignore())
.ForMember(dest => dest.CLCAR_INSPECCION, act => act.Ignore())
.ForMember(dest => dest.CLCAR_PERFILES, act => act.Ignore())
.ForMember(dest => dest.CLCAR_SOLICITUD_INSPECCION, act => act.Ignore());
//.ForMember(dest => dest.CLCAR_PERMISOS_ESPECIALES, act => act.Ignore());
此实体具有权限列表,由称为CLCAR_PERMISOS_ESPECIALES
的实体表示。
CLCAR_MAE_USUARIOS
实体
public partial class CLCAR_MAE_USUARIOS
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public CLCAR_MAE_USUARIOS()
{
CLCAR_INSPECCION = new HashSet<CLCAR_INSPECCION>();
CLCAR_SOLICITUD_INSPECCION = new HashSet<CLCAR_SOLICITUD_INSPECCION>();
CLCAR_PERMISOS_ESPECIALES = new HashSet<CLCAR_PERMISOS_ESPECIALES>();
}
[Key]
public int USU_ID { get; set; }
[Required]
[StringLength(50)]
public string USU_USERNAME { get; set; }
[StringLength(50)]
public string USU_NOMBRES { get; set; }
[StringLength(50)]
public string USU_APELLIDO_PATERNO { get; set; }
[StringLength(50)]
public string USU_APELLIDO_MATERNO { get; set; }
[Required]
[StringLength(50)]
public string USU_CLAVE { get; set; }
public int USU_PERFIL_ID { get; set; }
public int? USU_RUT { get; set; }
[StringLength(1)]
public string USU_DV { get; set; }
[Column(TypeName = "date")]
public DateTime USU_FECHA_CREACION_USUARIO { get; set; }
public bool USU_ACTIVO { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<CLCAR_INSPECCION> CLCAR_INSPECCION { get; set; }
public virtual CLCAR_PERFILES CLCAR_PERFILES { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<CLCAR_SOLICITUD_INSPECCION> CLCAR_SOLICITUD_INSPECCION { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<CLCAR_PERMISOS_ESPECIALES> CLCAR_PERMISOS_ESPECIALES { get; set; }
}
我的用户的DTO称为DTOUsuario
PD:在此DTO中,我更改了权限列表DTO,因为在此DTO中填充权限列表时,这给了我从对象列表到数组的转换错误< / p>
public class DTOUsuario
{
public DTOUsuario()
{
//CLCAR_PERMISOS_ESPECIALES = new List<DTOPermisos>();
}
public int? USU_ID { get; set; }
public int? USU_PERFIL_ID { get; set; }
[MaxLength(20)]
public string USU_USERNAME { get; set; }
public bool USU_ACTIVO { get; set; }
//anexo
[MaxLength(20)]
public string USU_CLAVE { get; set; }
public int USU_RUT { get; set; }
[MaxLength(1)]
public string USU_DV { get; set; }
[MaxLength(30)]
public string USU_NOMBRES { get; set; }
[MaxLength(20)]
public string USU_APELLIDO_PATERNO { get; set; }
[MaxLength(20)]
public string USU_APELLIDO_MATERNO { get; set; }
//public List<DTOPermisos> CLCAR_PERMISOS_ESPECIALES { get; set; }
public DTOPermisos[] CLCAR_PERMISOS_ESPECIALES { get; set; }
}
CLCAR_PERMISOS_ESPECIALES
实体
public partial class CLCAR_PERMISOS_ESPECIALES
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public CLCAR_PERMISOS_ESPECIALES()
{
CLCAR_MAE_USUARIOS = new HashSet<CLCAR_MAE_USUARIOS>();
}
[Key]
public int PESP_ID { get; set; }
[Required]
[StringLength(50)]
public string PESP_NOMBRE { get; set; }
public int PESP_TIPO { get; set; }
[Required]
[StringLength(50)]
public string PESP_DESCRIPCION { get; set; }
public int PESP_FUN_ID { get; set; }
public bool PESP_ACTIVO { get; set; }
public virtual CLCAR_MAE_FUNCIONALIDAD CLCAR_MAE_FUNCIONALIDAD { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<CLCAR_MAE_USUARIOS> CLCAR_MAE_USUARIOS { get; set; }
}
DTOPermisos
我的权限DTO
public class DTOPermisos
{
public int PESP_ID { get; set; }
[MaxLength(40)]
public string PESP_NOMBRE { get; set; }
public int PESP_TIPO { get; set; }
[MaxLength(150)]
public string PESP_DESCRIPCION { get; set; }
public int? PESP_FUN_ID { get; set; }
public bool PESP_ACTIVO { get; set; }
public DTOPermisos[] CLCAR_MAE_USUARIOS { get; set; }
public DTOFuncionalidad CLCAR_MAE_FUNCIONALIDAD { get; set; }
}
在我的上下文中,两者都有很多对很多的关系
modelBuilder.Entity<CLCAR_MAE_USUARIOS>()
.HasMany(e => e.CLCAR_PERMISOS_ESPECIALES)
.WithMany(e => e.CLCAR_MAE_USUARIOS)
.Map(m => m.ToTable("CLCAR_USUARIOS_PESPECIALES").MapLeftKey("USU_ID").MapRightKey("PESP_ID"));
我应该改变什么?我的头快要爆炸了,请帮忙! 如果您需要任何更多信息,我将关注并上传此帖子。感谢您的关注。