2014-11-06 73 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