EF - 保存父实体与儿童
问题描述:
我有2个实体..... 1-0的关系(和这份执行档案馆)EF - 保存父实体与儿童
public class Documento
{
public int DocumentoID { get; set; }
public int? ExpedienteID { get; set; }
public int? TipoDocumentoID { get; set; }
public int? ArchivoID { get; set; }
public DateTime? FechaRegistro { get; set; }
public int? Fojas { get; set; }
public string Referencia { get; set; }
public bool TieneArchivoFisico { get; set; }
public DocumentoAdicional? Adicional { get; set; }
public virtual Expediente Expediente { get; set; }
public virtual TipoDocumento TipoDocumento { get; set; }
public virtual Archivo Archivo { get; set; }
}
public class Archivo
{
public int ArchivoID { get; set; }
public int DocumentoID { get; set; }
public string Nombre { get; set; }
public string Descripcion { get; set; }
public string Resumen { get; set; }
public byte[] DatosArchivo{ get; set; }
public virtual Documento Documento { get; set; }
}
当我保存这个2 ......他们正确地保存到DB,但他们悬空....这是我用来保存代码:
public bool AdjuntarDocumentoAExpediente(Documento documento, string nombreArchivo, Stream streamArchivo, string descripcion, string resumen, out string mensajeError)
{
bool resultado = false;
mensajeError = string.Empty;
try
{
using (var contexto = new ModeloTC())
{
documento.TieneArchivoFisico = true;
Archivo archivo = new Archivo();
archivo.Documento = documento; //adding relation here
archivo.Descripcion = descripcion;
archivo.Nombre = nombreArchivo;
archivo.Resumen = resumen;
archivo.DatosArchivo = ConvertirStreamABytes(streamArchivo);
contexto.Archivos.Add(archivo);
contexto.SaveChanges();
resultado = true;
}
}
catch (Exception ex)
{
mensajeError = "BLL AdjuntarDocumentoAExpediente:" + ex.GetBaseException().Message;
}
return resultado;
}
问题是...是,执行此方法后,这是我的DB数据是如何模样。 ...
Table Archivo
ArchivoID DocumentoID Nombre Descripcion Resumen DatosArchivo
5 0 C:\Users\test\justafilename.txt lalala lalalalala
Table Documento
DocumentoID ExpedienteID ArchivoID FechaRegistro .....
5 1 NULL 2014-11-06 .....
正如您所看到的,Archivo表中的DocumentoID具有0作为值......并且Documento表中的ArchivoID具有NULL ......除关系外,两个实体都已正确保存。 .....我不知道为什么会发生这种情况......
答
您在documento中有archivo和archivoid中的documentoid。还有documento中的documento虚拟财产和documento中的archivo虚拟财产。这是一个循环依赖,所以如果不能创建关系。您需要删除其中的一个,具体取决于哪些是主表,哪些是子表。
+0
是的,你是对的。谢谢 – Fede 2014-11-07 18:41:33
但是您注意到ArchivoID和DocumentoID同时为xxxId?看起来像EF创建了一个pk/fk ... – 2014-11-06 23:03:32