L'instruction Insert en conflit avec la contrainte de CLÉ ÉTRANGÈRE. Entity Framework

mes modèles sont comme suit...

public class Company
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
[Required]
[MaxLength(255)]
public string Fullname { get; set; }
public bool HasFuneralInsuranceParlours { get; set; }
public bool HasFuneralInsurancePolicies { get; set; }
public bool HasLifeInsurancePolicies { get; set; }
public bool IsDeleted { get; set; }
public virtual List<Office> Offices { get; set; }
}
public class Office
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[MaxLength(50)]
public string Name { get; set; }
[MaxLength(100)]
public string Address1 { get; set; }
[MaxLength(100)]
public string Address2 { get; set; }
[MaxLength(100)]
public string Address3 { get; set; }
[MaxLength(20)]
public string Telephone { get; set; }
[MaxLength(20)]
public string Fax { get; set; }
[MaxLength(255)]
public string Email { get; set; }
public bool IsDeleted { get; set; }
public Guid CompanyId { get; set; }
public virtual Company Companies { get; set; }
public virtual List<Employee> Employees { get; set; }
}

et contrôleurs de

 [HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(OfficeModel model)
{
bool success = false;
string message = "";
byte[] logo = null;
var user = SecurityHelper.GetAuthenticatedUser(this.HttpContext);
try
{
if (ModelState.IsValid)
{
if (model.Name.IsNullOrWhitespace()) throw new Exception("Unable to create this Employee Name. The Type cannot be blank or spaces.");
if (models.Offices.Any(x => x.Name.ToLower() == model.Name.ToLower())) throw new Exception(string.Format("This Office's Name '{0}' already exists. Please check your data.", model.Name.ToUpperCase()));
var entry = new Office
{
Id  = Guid.NewGuid(),
Name = model.Name.ToUpperCase(),
Address1 = model.Address1.ToUpperCase(),
Address2 = model.Address2.ToUpperCase(),
Address3 = model.Address3.ToUpperCase(),
Telephone = model.Telephone.ToUpperCase(),
Fax = model.Fax.ToUpperCase(),
Email = model.Email.ToUpperCase(),
IsDeleted = false,
CompanyId = user.CompanyId,
Bankings =  new List<Banking>()
{
new Banking
{
Bank = model.OfficeBank.ToUpperCase(),
Account = model.BankAccount.ToUpperCase(),
Branch = model.Branch.ToUpperCase(),
BranchNo = model.BranchNo.ToUpperCase(),
AccountType = model.AccountType.ToUpperCase()
}
}
};
models.Offices.Add(entity);
success = true;
return RedirectToAction("Index");
}
else
{
message = "An error was cought please check your data and retry";
}
}
catch (Exception ex)
{
message = ex.Message;
}
return View(model);
}

lorsque l déboguer le code ci-dessus l renvoie l'erreur suivante

"L'instruction INSERT en conflit avec la contrainte de CLÉ ÉTRANGÈRE
\"FK_dbo.Offices_dbo.Companies_CompanyId\". Le conflit s'est produit dans
la base de données \"PolicyManager\", table \"dbo.Entreprises\", colonne
"Id".\r\nle instruction a été arrêtée."

Lorsque l hover modèle.Nom de l am retourner une valeur, mais le reste me rendre une valeur null qui l soupçonne les ainsi la cause de l'erreur ci-dessus.

Ce problème peut-il être possible parce que l ont utilisé le même code avant et ça a fonctionné. Peut aider quelqu'un. Je vous remercie à l'avance

Se pourrait-il qu'il y a déjà un problème avec le user var? I. e. user.CompanyId n'a pas de valeur (ou pas le droit)?
Qu'est-ce que Bankings? Qu'est-ce que entity? Ne devrait-elle pas être des modèles.Les bureaux.Ajouter(entrée)?;
oui bancaire est une entité qui détient des coordonnées bancaires..
je suis toujours le même message d'erreur lors de commenter var utilisateur et companyId.
Bien sûr, vous le faites! Vous devez vérifier qu'il pendant le débogage!

OriginalL'auteur Muzingaye | 2013-12-12