数据库优先&错误:无法确定相关操作的有效排序

时间:2017-03-30 13:45:44

标签: asp.net-mvc entity-framework

我正在处理的项目有问题。在POST:编辑,它保存我的更改。在POST:创建时,我收到此错误:"无法确定相关操作的有效排序。由于外键约束,模型要求或存储生成的值,可能存在依赖关系。"

所以我做了老师在大学里教给我们的东西:我只是用谷歌搜索了它。然而答案是建议改变ModelBuilder-fluent API。我不认为这是不合适的,因为我使用Database-First方法(它表示它仅适用于Code-First) AND 我的Save在Edit中起作用。由于我想使用ViewModels,因此我遵循了tutorial。我甚至找到并发布了关于Create方法的教程解决方案,以帮助解决我的问题。请帮我。我准备把电脑扔出窗外。这有点复杂,因为它们是由钢化玻璃制成的。

所以这里是我的模型的元数据(为了便于阅读,使用最少的数据注释:

public partial class Employe
{
    sealed class Metadata
    {
        [Key]
        public int IdEmploye { get; set; }


        public string NomEmploye { get; set; }


        public string PrenomEmploye { get; set; }


        [ForeignKey("TitreEmploye_IdTitre")]            
        public int IdTitre { get; set; }


        [ForeignKey("Departement_IdDepartement")]            
        public int IdDepartement { get; set; }


        [ForeignKey("Employe_IdSuperviseur")]            
        public int IdSuperviseur { get; set; }


        public System.DateTime DateEmbauche { get; set; }


        public Nullable<System.DateTime> DateDepart { get; set; }


        public string StatutEmploye { get; set; }


        [ForeignKey("Employeur_IdEmployeur")]            
        public int IdEmployeur { get; set; }


        [ForeignKey("Localisation_IdLocalisation")]            
        public int IdLocalisation { get; set; }


        public string Langue { get; set; }


        public Nullable<bool> CarteAcces { get; set; }


        [ForeignKey("TelephoneBureau_IdTelephoneBureau")]            
        public Nullable<int> IdTelephoneBureau { get; set; }


        public Nullable<bool> CarteAffaire { get; set; }


        public string AdresseCourriel { get; set; }


        public bool CodeAlarme { get; set; }


        public System.DateTime DateNaissance { get; set; }


        public Nullable<bool> IsSuperviseur { get; set; }


        public Nullable<bool> IsActif { get; set; }
    }
}

}

这是我的问题(?)模型:

public partial class Employe
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Employe()
    {
        this.AccesApplicatif1 = new HashSet<AccesApplicatif>();
        this.TelephoneCellulaire1 = new HashSet<TelephoneCellulaire>();
        this.CleBatiment1 = new HashSet<CleBatiment>();
        this.EquipementInfo = new HashSet<EquipementInfo>();
        this.GroupeSecurite1 = new HashSet<GroupeSecurite>();
        this.VehiculeCompagnie1 = new HashSet<VehiculeCompagnie>();
        this.Employe1 = new HashSet<Employe>();
    }

    public int IdEmploye { get; set; }
    public string NomEmploye { get; set; }
    public string PrenomEmploye { get; set; }
    public int IdTitre { get; set; }
    public int IdDepartement { get; set; }
    public int IdSuperviseur { get; set; }
    public System.DateTime DateEmbauche { get; set; }
    public Nullable<System.DateTime> DateDepart { get; set; }
    public string StatutEmploye { get; set; }
    public int IdEmployeur { get; set; }
    public int IdLocalisation { get; set; }
    public string Langue { get; set; }
    public Nullable<bool> CarteAcces { get; set; }
    public Nullable<int> IdTelephoneBureau { get; set; }
    public Nullable<bool> CarteAffaire { get; set; }
    public string AdresseCourriel { get; set; }
    public bool CodeAlarme { get; set; }
    public System.DateTime DateNaissance { get; set; }
    public Nullable<bool> IsSuperviseur { get; set; }
    public Nullable<bool> IsActif { get; set; }

    public virtual Departement Departement { get; set; }
    public virtual Employeur Employeur { get; set; }
    public virtual Localisation Localisation { get; set; }
    public virtual TelephoneBureau TelephoneBureau { get; set; }
    public virtual TitreEmploye TitreEmploye { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<AccesApplicatif> AccesApplicatif1 { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<TelephoneCellulaire> TelephoneCellulaire1 { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<CleBatiment> CleBatiment1 { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<EquipementInfo> EquipementInfo { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<GroupeSecurite> GroupeSecurite1 { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<VehiculeCompagnie> VehiculeCompagnie1 { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Employe> Employe1 { get; set; }
    public virtual Employe Employe2 { get; set; }

    public string NomSuperviseur
    {
        get
        {
            return string.Format("{0} {1}", PrenomEmploye, NomEmploye);
        }
    }
}

正如我所说,既然我想与ViewModels合作,那么这就是罪魁祸首:

public partial class EmployeVM
{        
    public Employe Employe { get; set; } //Employe


    public string NomEmploye { get; set; } //Employe


    public string PrenomEmploye { get; set; } //Employe


    public DateTime DateNaissance { get; set; } //Employe


    public string Langue { get; set; } //Employe


    //////////////////////////////////////////////////////////////        
    public IEnumerable<Titre> Titres { get; set; } //TitreEmploye
    public class Titre
    {
        public string description { get; set; } //TitreEmploye
    }


    //////////////////////////////////////////////////////////////       
    public IEnumerable<Departement> Departements { get; set; } //Departement
    public class Departement
    {
        public string description { get; set; } //Departement
    }


    //////////////////////////////////////////////////////////////       
    public IEnumerable<Superviseur> Superviseurs { get; set; } //Employe
    public class Superviseur
    {
        public string nomSuperviseur { get; set; } //Employe
    }


    public string StatutEmploye { get; set; } //Employe


    public DateTime DateEmbauche { get; set; } //Employe


    public Nullable<System.DateTime> DateDepart { get; set; } //Employe


    //////////////////////////////////////////////////////////////        
    public IEnumerable<Employeur> Employeurs { get; set; } //Employeur
    public class Employeur
    {
        public string nomEmployeur { get; set; } //Employeur
    }


    //////////////////////////////////////////////////////////////       
    public IEnumerable<Localisation> Localisations { get; set; } //Localisation
    public class Localisation
    {
        public string description { get; set; } //Localisation
    }


    public bool CarteAcces { get; set; } //Employe


    //////////////////////////////////////////////////////////////        
    public IEnumerable<TelephoneBureau> TelephoneBureaux { get; set; } //TelephoneBureau
    public class TelephoneBureau
    {
        public string extension { get; set; } //TelephoneBureau
    }


    //////////////////////////////////////////////////////////////       
    public IEnumerable<SelectListItem> AllTelephoneCellulaires { get; set; } //TelephoneCellulaire        
    private List<int> _selectedTelephoneCellulaires;
    public List<int> SelectedTelephoneCellulaires
    {
        get
        {
            if (_selectedTelephoneCellulaires == null)
            {
                _selectedTelephoneCellulaires = Employe.TelephoneCellulaire1.Select(m => m.IdTelephoneCellulaire).ToList();
            }
            return _selectedTelephoneCellulaires;
        }
        set { _selectedTelephoneCellulaires = value; }
    }


    public bool CarteAffaire { get; set; } //Employe


    //////////////////////////////////////////////////////////////        
    public IEnumerable<SelectListItem> AllEquipementInformatiques { get; set; } //EquipementInfo
    private List<int> _selectedEquipementInformatiques;
    public List<int> SelectedEquipementInformatiques
    {
        get
        {
            if (_selectedEquipementInformatiques == null)
            {
                _selectedEquipementInformatiques = Employe.EquipementInfo.Select(m => m.IdEquipementInfo).ToList();
            }
            return _selectedEquipementInformatiques;
        }
        set { _selectedEquipementInformatiques = value; }
    }


    public string AdresseCourriel { get; set; } //Employe


    //////////////////////////////////////////////////////////////      
    public IEnumerable<SelectListItem> AllGroupeSecurites { get; set; } //GroupeSecurite
    private List<int> _selectedGroupeSecurites;
    public List<int> SelectedGroupeSecurites
    {
        get
        {
            if (_selectedGroupeSecurites == null)
            {
                _selectedGroupeSecurites = Employe.GroupeSecurite1.Select(m => m.IdGroupeSecurite).ToList();
            }
            return _selectedGroupeSecurites;
        }
        set { _selectedGroupeSecurites = value; }
    }


    //////////////////////////////////////////////////////////////       
    public IEnumerable<SelectListItem> AllAccesApplicatifs { get; set; } //AccesApplicatif
    private List<int> _selectedAccesApplicatifs;
    public List<int> SelectedAccesApplicatifs
    {
        get
        {
            if (_selectedAccesApplicatifs == null)
            {
                _selectedAccesApplicatifs = Employe.AccesApplicatif1.Select(m => m.IdAccesApplicatif).ToList();
            }
            return _selectedAccesApplicatifs;
        }
        set { _selectedAccesApplicatifs = value; }
    }


    public bool CodeAlarme { get; set; } //Employe


    //////////////////////////////////////////////////////////////       
    public IEnumerable<SelectListItem> AllCleBatiments { get; set; } //CleBatiment
    private List<int> _selectedCleBatiments;
    public List<int> SelectedCleBatiments
    {
        get
        {
            if (_selectedCleBatiments == null)
            {
                _selectedCleBatiments = Employe.CleBatiment1.Select(m => m.IdCleBatiment).ToList();
            }
            return _selectedCleBatiments;
        }
        set { _selectedCleBatiments = value; }
    }


    //////////////////////////////////////////////////////////////       
    public IEnumerable<SelectListItem> AllVehiculeCompagnies { get; set; } //VehiculeCompagnie
    private List<int> _selectedVehiculeCompagnies;
    public List<int> SelectedVehiculeCompagnies
    {
        get
        {
            if (_selectedVehiculeCompagnies == null)
            {
                _selectedVehiculeCompagnies = Employe.VehiculeCompagnie1.Select(m => m.IdVehiculeCompagnie).ToList();
            }
            return _selectedVehiculeCompagnies;
        }
        set { _selectedVehiculeCompagnies = value; }
    }


    public bool IsSuperviseur { get; set; } //Employe


    public bool IsActif { get; set; } //Employe

    public EmployeVM()
    {
        AllTelephoneCellulaires = new List<SelectListItem>();
        AllEquipementInformatiques = new List<SelectListItem>();
        AllGroupeSecurites = new List<SelectListItem>();
        AllAccesApplicatifs = new List<SelectListItem>();
        AllCleBatiments = new List<SelectListItem>();
        AllVehiculeCompagnies = new List<SelectListItem>();                    
    }
}

这里是我的控制器的创建部分(我知道我将不得不添加一些方法来遵守DRY,但就目前来说,它是什么:

// GET: Employes/Create
    //[AcceptVerbs(HttpVerbs.Get), ImportModelStateFromTempData]
    public ActionResult Create()
    {
        var employeView = new EmployeVM();

        //Population pour les ListBoxFor
        var allTelephoneCellulaireActifList = db.TelephoneCellulaireActif.ToList();
        ViewBag.AllTelephoneCellulaires = allTelephoneCellulaireActifList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdTelephoneCellulaire.ToString()
        });
        var allEquipementInfoActifList = db.EquipementInfoActif.ToList();
        ViewBag.AllEquipementInformatiques = allEquipementInfoActifList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdEquipementInfo.ToString()
        });
        var allGroupeSecuriteList = db.GroupeSecurite.ToList();
        ViewBag.AllGroupeSecurites = allGroupeSecuriteList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdGroupeSecurite.ToString()
        });
        var allAccesApplicatifActifList = db.AccesApplicatifActif.ToList();
        ViewBag.AllAccesApplicatifs = allAccesApplicatifActifList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdAccesApplicatif.ToString()
        });
        var allCleBatimentList = db.CleBatiment.ToList();
        ViewBag.AllCleBatiments = allCleBatimentList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdCleBatiment.ToString()
        });
        var allVehiculeCompagnieActifList = db.VehiculeCompagnieActif.ToList();
        ViewBag.AllVehiculeCompagnies = allVehiculeCompagnieActifList.Select(o => new SelectListItem
        {
            Text = o.DescriptionVehicule,
            Value = o.IdVehiculeCompagnie.ToString()
        });

        //Zero-or-One-to-Many relationships
        List<TitreEmployeActif> ListeTitreEmployeActif = db.TitreEmployeActif.OrderBy(titre => titre.Description).ToList();
        ViewBag.IdTitre = new SelectList(ListeTitreEmployeActif, "IdTitre", "Description");

        List<Departement> ListeDepartement = db.Departement.OrderBy(departement => departement.Description).ToList();
        ViewBag.IdDepartement = new SelectList(ListeDepartement, "IdDepartement", "Description");

        List<EmployeSuperviseurActif> ListeEmployeSuperviseurActif = db.EmployeSuperviseurActif.OrderBy(sup => sup.PrenomNom).ToList();
        ViewBag.IdSuperviseur = new SelectList(ListeEmployeSuperviseurActif, "IdEmploye", "PrenomNom");

        List<Employeur> ListeEmployeur = db.Employeur.OrderBy(employeur => employeur.NomEmployeur).ToList();
        ViewBag.IdEmployeur = new SelectList(ListeEmployeur, "IdEmployeur", "NomEmployeur");

        List<Localisation> ListeLocalisation = db.Localisation.OrderBy(localisation => localisation.Description).ToList();
        ViewBag.IdLocalisation = new SelectList(ListeLocalisation, "IdLocalisation", "Description");

        List<TelephoneBureauActif> ListeTelephoneBureauActif = db.TelephoneBureauActif.OrderBy(phone => phone.Extension).ToList();
        ViewBag.IdTelephoneBureau = new SelectList(ListeTelephoneBureauActif, "IdTelephoneBureau", "Extension");

        return View();
    }

    // POST: Employes/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, 
    // for more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(EmployeVM employeView)
    {
        if (!ModelState.IsValid)
        {
            foreach (var obj in ModelState.Values)
            {
                foreach (var error in obj.Errors)
                {
                    if (!string.IsNullOrEmpty(error.ErrorMessage))
                        System.Diagnostics.Debug.WriteLine("ERROR WHY = " + error.ErrorMessage);
                }
            }
        }

        if (ModelState.IsValid)
        {
            var employeToAdd = db.Employe
                .Include(e => e.TelephoneCellulaire1)
                .Include(e => e.EquipementInfo)
                .Include(e => e.GroupeSecurite1)
                .Include(e => e.AccesApplicatif1)
                .Include(e => e.CleBatiment1)
                .Include(e => e.VehiculeCompagnie1)
                .First();

            if (TryUpdateModel(employeToAdd, "Employe", new string[] { "IdEmploye", "NomEmploye", "PrenomEmploye", "IdTitre", "IdDepartement", "IdSuperviseur", "DateEmbauche", "DateDepart", "StatutEmploye", "IdEmployeur", "IdLocalisation", "Langue", "CarteAcces", "TelephoneCellulaire", "IdTelephoneBureau", "CarteAffaire", "EquipementInformatique", "AdresseCourriel", "GroupeSecurite", "AccesApplicatif", "CodeAlarme", "CleBatiment", "VehiculeCompagnie", "DateNaissance", "IsSuperviseur", "IsActif" }))
            {
                var updatedTelephoneCellulaires = new HashSet<int>(employeView.SelectedTelephoneCellulaires);
                var updatedEquipementInformatiques = new HashSet<int>(employeView.SelectedEquipementInformatiques);
                var updatedGroupeSecurites = new HashSet<int>(employeView.SelectedGroupeSecurites);
                var updatedAccesApplicatifs = new HashSet<int>(employeView.SelectedAccesApplicatifs);
                var updatedCleBatiments = new HashSet<int>(employeView.SelectedCleBatiments);
                var updatedVehiculeCompagnies = new HashSet<int>(employeView.SelectedVehiculeCompagnies);

                //Prochaine ligne db.TelephoneCellulaire1 !!! ou db.TelephoneCellulaireActif ???  Check readonly
                foreach (TelephoneCellulaire telephone in db.TelephoneCellulaire)
                {
                    if (!updatedTelephoneCellulaires.Contains(telephone.IdTelephoneCellulaire))
                    {
                        employeToAdd.TelephoneCellulaire1.Remove(telephone);
                    }
                    else
                    {
                        employeToAdd.TelephoneCellulaire1.Add(telephone);
                    }
                }
                foreach (EquipementInfo equipement in db.EquipementInfo)
                {
                    if (!updatedEquipementInformatiques.Contains(equipement.IdEquipementInfo))
                    {
                        employeToAdd.EquipementInfo.Remove(equipement);
                    }
                    else
                    {
                        employeToAdd.EquipementInfo.Add(equipement);
                    }
                }
                foreach (GroupeSecurite groupe in db.GroupeSecurite)
                {
                    if (!updatedGroupeSecurites.Contains(groupe.IdGroupeSecurite))
                    {
                        employeToAdd.GroupeSecurite1.Remove(groupe);
                    }
                    else
                    {
                        employeToAdd.GroupeSecurite1.Add(groupe);
                    }
                }
                foreach (AccesApplicatif acces in db.AccesApplicatif)
                {
                    if (!updatedAccesApplicatifs.Contains(acces.IdAccesApplicatif))
                    {
                        employeToAdd.AccesApplicatif1.Remove(acces);
                    }
                    else
                    {
                        employeToAdd.AccesApplicatif1.Add(acces);
                    }
                }
                foreach (CleBatiment cle in db.CleBatiment)
                {
                    if (!updatedCleBatiments.Contains(cle.IdCleBatiment))
                    {
                        employeToAdd.CleBatiment1.Remove(cle);
                    }
                    else
                    {
                        employeToAdd.CleBatiment1.Add(cle);
                    }
                }
                foreach (VehiculeCompagnie vehicule in db.VehiculeCompagnie)
                {
                    if (!updatedVehiculeCompagnies.Contains(vehicule.IdVehiculeCompagnie))
                    {
                        employeToAdd.VehiculeCompagnie1.Remove(vehicule);
                    }
                    else
                    {
                        employeToAdd.VehiculeCompagnie1.Add(vehicule);
                    }
                }
            }
            db.Employe.Add(employeToAdd);
            db.SaveChanges();
            return RedirectToAction("Index");
        }                    

        var allTelephoneCellulaireActifList = db.TelephoneCellulaireActif.ToList();
        ViewBag.AllTelephoneCellulaires = allTelephoneCellulaireActifList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdTelephoneCellulaire.ToString()
        });
        var allEquipementInfoActifList = db.EquipementInfoActif.ToList();
        ViewBag.AllEquipementInformatiques = allEquipementInfoActifList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdEquipementInfo.ToString()
        });
        var allGroupeSecuriteList = db.GroupeSecurite.ToList();
        ViewBag.AllGroupeSecurites = allGroupeSecuriteList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdGroupeSecurite.ToString()
        });
        var allAccesApplicatifActifList = db.AccesApplicatifActif.ToList();
        ViewBag.AllAccesApplicatifs = allAccesApplicatifActifList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdAccesApplicatif.ToString()
        });
        var allCleBatimentList = db.CleBatiment.ToList();
        ViewBag.AllCleBatiments = allCleBatimentList.Select(o => new SelectListItem
        {
            Text = o.Description,
            Value = o.IdCleBatiment.ToString()
        });
        var allVehiculeCompagnieActifList = db.VehiculeCompagnieActif.ToList();
        ViewBag.AllVehiculeCompagnies = allVehiculeCompagnieActifList.Select(o => new SelectListItem
        {
            Text = o.DescriptionVehicule,
            Value = o.IdVehiculeCompagnie.ToString()
        });

        //Zero-or-One-to-Many relationships
        List<TitreEmployeActif> ListeTitreEmployeActif = db.TitreEmployeActif.OrderBy(titre => titre.Description).ToList();
        ViewBag.IdTitre = new SelectList(ListeTitreEmployeActif, "IdTitre", "Description");

        List<Departement> ListeDepartement = db.Departement.OrderBy(departement => departement.Description).ToList();
        ViewBag.IdDepartement = new SelectList(ListeDepartement, "IdDepartement", "Description");

        List<EmployeSuperviseurActif> ListeEmployeSuperviseurActif = db.EmployeSuperviseurActif.OrderBy(sup => sup.PrenomNom).ToList();
        ViewBag.IdSuperviseur = new SelectList(ListeEmployeSuperviseurActif, "IdEmploye", "PrenomNom");

        List<Employeur> ListeEmployeur = db.Employeur.OrderBy(employeur => employeur.NomEmployeur).ToList();
        ViewBag.IdEmployeur = new SelectList(ListeEmployeur, "IdEmployeur", "NomEmployeur");

        List<Localisation> ListeLocalisation = db.Localisation.OrderBy(localisation => localisation.Description).ToList();
        ViewBag.IdLocalisation = new SelectList(ListeLocalisation, "IdLocalisation", "Description");

        List<TelephoneBureauActif> ListeTelephoneBureauActif = db.TelephoneBureauActif.OrderBy(phone => phone.Extension).ToList();
        ViewBag.IdTelephoneBureau = new SelectList(ListeTelephoneBureauActif, "IdTelephoneBureau", "Extension");

        return View(employeView);
    }

只是为了完成图片,来自Create.cshtml的摘录:

        <div class="form-group">
        @Html.LabelFor(model => model.AllEquipementInformatiques, "Équipements informatiques", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.ListBoxFor(model => model.SelectedEquipementInformatiques, (IEnumerable<SelectListItem>)ViewBag.AllEquipementInformatiques, new { @class = "form-control" })
        </div>
    </div>

谈到一张图片,这里有一个我的多对多表格中的一个,用数据输入数据:

Employe_VehiculeCompagnie

要知道的事情(我认为它可能是问题的一部分)是:所有6个多对多关系都是可选的。但即使我尝试在6个多对多字段中的每一个中创建一个至少有一个项目的新Employe,它也会抛出该错误。它仍然适用于编辑。问题:为什么会抛出此错误以及如何使我的应用程序正常工作?任何帮助将不胜感激。

修改 我应该加这个吗?我的一个联接表:

CREATE TABLE [dbo].[Employe_GroupeSecurite] (
[IdEmploye]        INT NOT NULL,
[IdGroupeSecurite] INT NOT NULL,
PRIMARY KEY CLUSTERED ([IdEmploye] ASC, [IdGroupeSecurite] ASC),
CONSTRAINT [FK_Employe_GroupeSecurite_Employe] FOREIGN KEY ([IdEmploye]) REFERENCES [dbo].[Employe] ([IdEmploye]),
CONSTRAINT [FK_Employe_GroupeSecurite_GroupeSecurite] FOREIGN KEY ([IdGroupeSecurite]) REFERENCES [dbo].[GroupeSecurite] ([IdGroupeSecurite])

现在是什么?

1 个答案:

答案 0 :(得分:0)

我找到了!这是我的解决方案,以防其他人遇到同样的问题。

出于某种奇怪的原因,Visual Studio添加了一个&#39; 1&#39;在我的一些多对多表名称的末尾。实体框架不喜欢它(我也不喜欢),所以我在我的模型中重命名它们:

示例:

public Employe()
{
    this.AccesApplicatif1 = new HashSet<AccesApplicatif>();
    this.TelephoneCellulaire1 = new HashSet<TelephoneCellulaire>();
    this.CleBatiment1 = new HashSet<CleBatiment>();
    this.EquipementInfo = new HashSet<EquipementInfo>();
    this.GroupeSecurite1 = new HashSet<GroupeSecurite>();
    this.VehiculeCompagnie1 = new HashSet<VehiculeCompagnie>();
    this.Employe1 = new HashSet<Employe>();
}

变成了:

this.AccesApplicatif = new HashSet<AccesApplicatif>();
this.TelephoneCellulaire = new HashSet<TelephoneCellulaire>();
this.CleBatiment = new HashSet<CleBatiment>();
this.EquipementInfo = new HashSet<EquipementInfo>();
this.GroupeSecurite = new HashSet<GroupeSecurite>();
this.VehiculeCompagnie = new HashSet<VehiculeCompagnie>();
this.Employe1 = new HashSet<Employe>();

Visual Studio非常智能,可以在几乎所有内容中重命名它们,除了我的Entities.edmx,Views和my Metadata。我非常关心它,现在,它的工作就像一个魅力。我仍然不明白为什么我能够编辑我的雇员...