Solucionado (ver solução)
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