2014-11-06 74 views
0

我有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 ......除关系外,两个实体都已正确保存。 .....我不知道为什么会发生这种情况......

+0

但是您注意到ArchivoID和DocumentoID同时为xxxId?看起来像EF创建了一个pk/fk ... – 2014-11-06 23:03:32

回答

0

您在documento中有archivo和archivoid中的documentoid。还有documento中的documento虚拟财产和documento中的archivo虚拟财产。这是一个循环依赖,所以如果不能创建关系。您需要删除其中的一个,具体取决于哪些是主表,哪些是子表。

+0

是的,你是对的。谢谢 – Fede 2014-11-07 18:41:33