EF - 使用子级保存父实体

时间:2014-11-06 22:39:29

标签: c# entity-framework

我有2个实体.....与1-0关系(Documento和Archivo)

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 ...它们正确保存到数据库,但它们没有连接....这是我用来保存它们的代码:

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;
    }

问题是......在执行此方法后,这就是我的数据库数据的样子......

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

1 个答案:

答案 0 :(得分:0)

你在documento中有archoid和archovoid。还有documento中的documento虚拟属性和documento中的archivo虚拟属性。这是循环依赖,因此无法创建关系。您需要删除其中一个,具体取决于哪个是主表,哪个是子表。