Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
12
respostas

Erro mapeamento OneToMany entity framework c# SQLServer

Pessoal bom dia estou usando entityFramework com sqlserver minha classe de migrations gera normalmente na hora de dar o update-database ele dá um erro como se o meu relacionamento OnetoMany não fosse reconhecido alguém pode me dar uma luz?

12 respostas

PM> Add-Migration CriaTabelas To undo this action, use Remove-Migration. PM> update-database Applying migration '20171031115553_CriaTabelas'. System.Data.SqlClient.SqlException (0x80131904): A introdução da restrição FOREIGN KEY 'FK_Funcionario_Usuario_UsuarioID' na tabela 'Funcionario' pode causar ciclos ou vários caminhos em cascata. Especifique ON DELETE NO ACTION ou ON UPDATE NO ACTION, ou modifique outras restrições FOREIGN KEY. Não foi possível criar a restrição ou o índice. Consulte os erros anteriores. em System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) em System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) em System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) em System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) em System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) em System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) em System.Data.SqlClient.SqlCommand.ExecuteNonQuery() em Microsoft.Data.Entity.Storage.Internal.RelationalCommand.<>c.<ExecuteNonQuery>b__13_0(DbCommand cmd, IRelationalConnection con) em Microsoft.Data.Entity.Storage.Internal.RelationalCommand.Execute[T](IRelationalConnection connection, Func3 action, String executeMethod, Boolean openConnection, Boolean closeConnection) em Microsoft.Data.Entity.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, Boolean manageConnection) em Microsoft.Data.Entity.Storage.RelationalCommandExtensions.ExecuteNonQuery(IEnumerable1 commands, IRelationalConnection connection) em Microsoft.Data.Entity.Migrations.Internal.Migrator.Execute(IEnumerable1 relationalCommands) em Microsoft.Data.Entity.Migrations.Internal.Migrator.Migrate(String targetMigration) em Microsoft.Data.Entity.Design.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType) em Microsoft.Data.Entity.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String contextType) em Microsoft.Data.Entity.Design.OperationExecutor.UpdateDatabase.<>cDisplayClass0_1.<.ctor>b0() em Microsoft.Data.Entity.Design.OperationExecutor.OperationBase.Execute(Action action) ClientConnectionId:1ea54b1a-8430-4500-9730-e1c63c08554f Error Number:1785,State:0,Class:16 A introdução da restrição FOREIGN KEY 'FK_Funcionario_Usuario_UsuarioID' na tabela 'Funcionario' pode causar ciclos ou vários caminhos em cascata. Especifique ON DELETE NO ACTION ou ON UPDATE NO ACTION, ou modifique outras restrições FOREIGN KEY. Não foi possível criar a restrição ou o índice. Consulte os erros anteriores.

eu preciso mapear OnetoMany?

Pelo que analisei aqui sempre a classe que herda a chave primaria da tabela do banco de dados deve ter na classe o metodo virtual para indicar o relacionamento e a chave estrangeira e na classe que sede a chave estrangeira tem que ter um virtual da classe que é cedida a chave estangeira

Estou analisando esse erro: A introdução da restrição FOREIGN KEY 'FK_Funcionario_Usuario_UsuarioID' na tabela 'Funcionario' pode causar ciclos ou vários caminhos em cascata. Especifique ON DELETE NO ACTION ou ON UPDATE NO ACTION, ou modifique outras restrições FOREIGN KEY. Não foi possível criar a restrição ou o índice. Consulte os erros anteriores

classe funcionario

public int ID { get; set; } public int UsuarioID { get; set; } public int EmpresaID { get; set; } public virtual Usuario Usuario { get; set; } public virtual Empresa Empresa { get; set; } public String Nome { get; set; } public String Logradouro { get; set; } public String Codigo { set; get; } public String Complemento { set; get; } public String Cep { get; set; } public DateTime DataCriacao { get; set; }

Classe empresa public int ID { get; set; } // [Required] public String Nome { get; set; } //[Required] public String CNPJ { get; set; } //[Required] public String Endereco { get; set; } //[Required] public String Telefone { get; set; } //[Required] public DateTime DataCriacao { get; set; } public virtual IList Usuario { get; set; } public virtual IList Funcionario { get; set; }

classe usuario

public int ID { get; set; } public int EmpresaID { get; set; } public virtual Empresa Empresa { get; set; } public virtual Funcionario Funcionario { get; set; } public String Email { get; set; } public String Senha { get; set; }

dbContext

public virtual DbSet Empresas { get; set; } public virtual DbSet Funcionarios { get; set; } public virtual DbSet Usuarios { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionBuild) { string stringConexao = ConfigurationManager.ConnectionStrings["conexao"].ConnectionString; optionBuild.UseSqlServer(stringConexao); base.OnConfiguring(optionBuild); }

update-database Erro A introdução da restrição FOREIGN KEY 'FK_Funcionario_Usuario_UsuarioID' na tabela 'Funcionario' pode causar ciclos ou vários caminhos em cascata. Especifique ON DELETE NO ACTION ou ON UPDATE NO ACTION, ou modifique outras restrições FOREIGN KEY. Não foi possível criar a restrição ou o índice. Consulte os erros anteriores.

Resolvi o problema aonde apresentar na migration essa chave FOREIGN KEY 'FK_Funcionario_Usuario_UsuarioID é só mudar a proriedade: ReferentialAction.Cascade para ReferentialAction.Restrict

feito isso o problema é resolvido

solução!

Boa Everton, vi que deu uma bela de uma volta para chegar nesse ponto

O legal é que agente vai se familiarizando com os erros e vai se aprendendo agora graças a Deus dominei esse tecnologia qualquer erro agora graças a Deus consigo resolver , obrigado pelas palavras