Tenho duas classes:
public class CaixaModel
{
public CaixaModel()
{
Movimentos = new List<CaixaMovimentoModel>();
}
[Key]
public int CodigoId { get; set; }
[Required, StringLength(30), Column("Nome do caixa")]
public string Nome { get; set; }
public int UsuarioId { get; set; }
[Column("Responsável")]
public UsuarioModel Responsavel { get; set; }
public virtual ICollection<CaixaMovimentoModel> Movimentos { get; set; }
}
e
public class UsuarioModel
{
[Key]
public int UsuarioId { get; set; }
[Required, StringLength(30)]
public string Nome { get; set; }
public virtual ICollection<PoderUsuarioModel> Poderes { get; set; }
}
faço o update-database e aparece o seguinte erro:
Introducing FOREIGN KEY constraint 'FK_dbo.CaixaModels_dbo.UsuarioModels_UsuarioId' on table 'CaixaModels' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint.
Então fui no documento da Migration e modifiquei a menção do cascadeDelete para false:
CreateTable(
"dbo.UsuarioModels",
c => new
{
UsuarioId = c.Int(nullable: false, identity: true),
Nome = c.String(nullable: false, maxLength: 30),
Matricula = c.String(nullable: false, maxLength: 10),
Email = c.String(nullable: false),
Categoria = c.Int(nullable: false),
NºnaOAB = c.String(name: "Nº na OAB", maxLength: 10),
UFdaOAB = c.Int(name: "UF da OAB", nullable: false),
Ativo = c.Boolean(nullable: false),
PrazoModel_AndamentoId = c.Int(),
ProcessoModel_ProcessoId = c.Int(),
})
.PrimaryKey(t => t.UsuarioId)
.ForeignKey("dbo.CategoriaUsuarioModels", t => t.Categoria, cascadeDelete: false)
.ForeignKey("dbo.AndamentoModels", t => t.PrazoModel_AndamentoId)
.ForeignKey("dbo.ProcessoModels", t => t.ProcessoModel_ProcessoId)
.Index(t => t.Categoria)
.Index(t => t.PrazoModel_AndamentoId)
.Index(t => t.ProcessoModel_ProcessoId);
O erro desapareceu!!!!
Mas quando faço outras modificações em modelos e uso o add-Migration Initial -Force, esse cascadeDelete é colocado como true novamente.
Então suponho que eu deveria colocar algo no Model indicando esse cascadeDelete como falso para que a reconstrução da Migration mantivesse esse valor.
Alguém tem uma ideia de onde fazer isso?