Pergunta

Eu estou tendo uma entidade que detém o acervo virtual de outra entidade.Quando tento inserir os dados preenchendo o acervo virtual para o recém-inserido objetos que ele está jogando o erro de objeto com a mesma chave já existe.

Eu sei que quando a entidade não é criado, ele vai ter de identidade do campo com o valor 0.Mas eu preciso armazenar o conjunto de dados quando eu armazenar os dados na tabela principal.

public virtual void Insert(TEntity entity)
    {
        ((IObjectState)entity).ObjectState = ObjectState.Added;
        entityDbSet.Attach(entity);
        dataContext.SyncObjectState(entity);
    }

Este é o método insert que eu estou usando.e abaixo está o poco classes (implementação parcial para estender as classes para realizar a coleta de dados) para esta operação.

public partial class UserDefinedData
{
    public int ID { get { return this.UserSelectedDValueID; } set { this.UserSelectedDValueID = value; } }
    public string Name { get { return this.entityTypeName; } }

    public virtual AM_AssetLocations AM_AssetLocations { get; set; }
}

public partial class AM_AssetLocations
{
    // Reverse navigation
    public virtual ICollection<UserDefinedData> UserDefinedDatas { get; set; }               
}

Eu estou passando os dados usando json.Que é também parece correto.como o acervo virtual de dados é adicionado à entidade corretamente.

{"entity":{"ID":"0","CreatedByID":"0","CreatedDate":"04-13-2014 10:48","ModifiedByID":"","ModifiedDate":"","DeletedByID":"","DeletedDate":"","Deleted":"false","Name":"h","Active":"true","DisplayOrder":"0","Test Decimal":"10","":"","Test Number":"10","Test Plain Text":"h","Test RTF":"<p>hsj</p>","Test Yes No":"false","Test Yes No 2":"true","TestDate":"01-Apr-2014","TestDateTime":"10:00 AM","UserDefinedDatas":[{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"123","ValueNumber":"10"},{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"124","ValueListItemID":"25"},{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"122","ValueNumber":"10"},{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"117","ValueString":"h"},{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"119","ValueString":"<p>hsj</p>"},{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"125","ValueYesNo":0},{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"126","ValueYesNo":1},{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"120","ValueDate":"01-Apr-2014"},{"EntityType":"AM_AssetLocations","EntityTypeID":"0","CreatedByID":"0","UserDefinedFieldID":"121","ValueDate":"08-Apr-2014 10:00 AM"}]}}

Por favor me ajude a resolver este problema.

Nota :Apenas para resolver esta mesma chave exceção se eu tentar atribuir o campo de identidade a minha auto-ele está jogando a integridade referencial exceção.Eu sei que armazenar o realative coleção deve funcionar bem.mas ele não está funcionando para mim.por favor me dê alguma orientação e solução para isso.

Obrigado, sachin

Foi útil?

Solução

Attach é para fixar as entidades existentes.

O contexto deve atribuir adequada próprio estado, não há necessidade de fazê-lo manualmente no seu caso

public virtual void Insert(TEntity entity)
{
    //((IObjectState)entity).ObjectState = ObjectState.Added;
    context.TEntityDbSet.Add(entity);//Add, not Attach!
    //dataContext.SyncObjectState(entity);
    context.SaveChanges()
}

.. http://msdn.microsoft.com/en-us/data/jj592676.aspx

Outras dicas

Hi Obrigado a todos por ajudar.Eu mudei a maneira de executar esta operação.Eu criei o procedimento armazenado que aceita a principal entidade e do usuário tabela definida pelo tipo de criança coleção que pode ser passado como conjunto de dados .net página.E isso funciona bem para mim.

obrigado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top