4

我在问这里之前尝试过谷歌搜索,但找不到任何解决方案。

我有这两个类和一个映射一对多

我正在尝试附加一个新对象

    公共类 MyContext : DbContext
    {
        公共 IDbSet Operacoes { 获取;放; }
        公共 IDbSet Apontamentos { 获取;放; }
    }

    公开课歌剧
    {
        公共字符串 Filial { 得到;放; }
        公共字符串 Codigo { 获取;放; }
        公共字符串 Descricao { 获取;放; }
    }

    公共课 Apontamento
    {
        公共 int ID { 获取;放; }
        公共字符串 Filial { 得到;放; }
        公共字符串 OperacaoCodigo { 获取;放; }
        公共虚拟 Operacao Operacao { get; 放; }
    }

    公共类 OperacaoMap : EntityTypeConfiguration
    {
        公共 OperacaoMap()
        {
            ToTable("za6010");
            HasKey(x => new { x.Filial, x.Codigo })
                .Property(x => x.Codigo).HasColumnName("za6_cod");

            属性(x => x.Descricao).HasColumnName("za6_desc");
        }
    }



    公共类 ApontamentoMap : EntityTypeConfiguration
    {
        公共 ApontamentoMap()
        {
            ToTable("za4010");

            HasKey(x => new { x.Filial, x.Id });

            属性(x => x.OperacaoCodigo)
                .HasColumnName("za4_oper");

            //
            HasRequired(x => x.Operacao)
                。与许多()
                .HasForeignKey(x => new { x.Filial, x.OperacaoCodigo })
                .WillCascadeOnDelete(false);
        }
    }

    公共静态类程序
    {
        静态无效主()
        {
            //这不起作用,我需要它来工作。
            var context = new MyContext();
            var newObj = 新的 Apontamento
            {
                孝顺 = "01",
                OperacaoCodigo = "001"
            };
            context.Apontamentos.Attach(newObj);
            var desc = newObj.Operacao.Descricao; // 这里 Operacao 属性为 null

            //这有效
            var newObjTmp = 新的 Apontamento
            {
                孝顺 = "01",
                OperacaoCodigo = "001"
            };
            var operacao = context.Operacoes.Where(x => x.Codigo == "001");
            context.Apontamentos.Attach(newObj);
            var descTmp = newObjTmp.Operacao.Descricao; // Operacao 属性没问题。

        }
    }
4

1 回答 1

6

您的第一种情况不起作用,因为您的实体没有被动态代理包装,并且导航属性不能被延迟加载。试试这个:

var context = new MyContext();
var newObj = context.Apontamentos.Create();
newObj.Filial = "01",
nowObj.OperacaoCodigo = "001"

context.Apontamentos.Attach(newObj);
var desc = newObj.Operacao.Descricao;

您还可以继续使用当前解决方案并显式加载属性:

 var context = new MyContext();
 var newObj = new Apontamento
     {
         Filial = "01",
         OperacaoCodigo = "001"
     };
 context.Apontamentos.Attach(newObj);
 context.Entry(newObj).Reference(o => o.Operacao).Load();
 var desc = newObj.Operacao.Descricao;
于 2012-04-19T20:57:51.370 回答