实体框架:发现了模糊匹配

时间:2014-08-13 12:28:01

标签: c# asp.net entity-framework

我在asp.net webform项目中使用Entity Framework 6.1。当我尝试将新对象添加到项目中时,我发现了模糊匹配异常。 我正在使用数据库第一种方法。在创建的模型中我没有任何操作。我已经阅读了一些关于这个问题的问题。一般原因与类中的命名属性和导航相同。我没有找到任何相同的命名属性。

你能告诉我我错过了什么吗?

谢谢

代码:

projects m_NewProject = new projects();
decimal m_CompanyRef = MemberHelperC.getUser().CompanyRef;
DateTime m_EndDate = GeneralHelperC.getCompanyDateTime().AddDays(5);
DateTime m_StartDate = GeneralHelperC.getCompanyDateTime();
customers m_Customer = myEntity.customers.Where(xXx => xXx.CompanyRef == m_CompanyRef).FirstOrDefault();
m_NewProject.ProjectLeadRef = MemberHelperC.getUserID();
m_NewProject.ProjectName = m_ProjectName;
m_NewProject.ProjectStatus = Convert.ToByte(1);
m_NewProject.SourceLangRef = Convert.ToDecimal(comboSourceLang.SelectedValue);
m_NewProject.TargetLangRef = Convert.ToDecimal(comboTargetLang.SelectedValue);
m_NewProject.DomainRef = Convert.ToDecimal(1);
m_NewProject.ProjectYear = GeneralHelperC.getCompanyDateTime()/*DateTime.Now*/.Year;
m_NewProject.EndDate = m_EndDate;
m_NewProject.StartDate = m_StartDate;
m_NewProject.TaskStepNameRef = m_TaskStepNameID;
m_NewProject.CustomerRef = Convert.ToDecimal(m_Customer.RID);
Random m_Random = new Random();
m_NewProject.ProjectUniqueID = m_Random.Next(0, 99999999);
m_NewProject.ProjectTBX = m_Dictionary.RID;
myEntity.projects.Add(m_NewProject);//exception occur this method
myEntity.SaveChanges();

对象类:

public partial class projects
{
    public projects()
    {
        this.projectnotes = new HashSet<projectnotes>();
        this.projectpriceoffers = new HashSet<projectpriceoffers>();
        this.projectreferencedoc = new HashSet<projectreferencedoc>();
        this.projects1 = new HashSet<projects>();
        this.taskstepexceptions = new HashSet<taskstepexceptions>();
        this.tbxrelation = new HashSet<tbxrelation>();
        this.tmproject = new HashSet<tmproject>();
        this.tmrelation = new HashSet<tmrelation>();
        this.wizardprojecttasks = new HashSet<wizardprojecttasks>();
        this.works = new HashSet<works>();
    }

    public decimal RID { get; set; }
    public string ProjectName { get; set; }
    public decimal ProjectStatus { get; set; }
    public decimal ProjectLeadRef { get; set; }
    public System.DateTime EndDate { get; set; }
    public System.DateTime StartDate { get; set; }
    public int ProjectYear { get; set; }
    public int ProjectUniqueID { get; set; }
    public Nullable<decimal> ParentProjectRef { get; set; }
    public Nullable<decimal> TMXHeaderRef { get; set; }
    public decimal SourceLangRef { get; set; }
    public decimal TargetLangRef { get; set; }
    public decimal DomainRef { get; set; }
    public decimal TaskStepNameRef { get; set; }
    public Nullable<decimal> ProjectTBX { get; set; }
    public Nullable<decimal> CustomerRef { get; set; }

    public virtual customers customers { get; set; }
    public virtual domainname domainname { get; set; }
    public virtual language language { get; set; }
    public virtual language language1 { get; set; }
    public virtual ICollection<projectnotes> projectnotes { get; set; }
    public virtual ICollection<projectpriceoffers> projectpriceoffers { get; set; }
    public virtual ICollection<projectreferencedoc> projectreferencedoc { get; set; }
    public virtual ICollection<projects> projects1 { get; set; }
    public virtual projects projects2 { get; set; }
    public virtual projectstatus projectstatus1 { get; set; }
    public virtual tasknames tasknames { get; set; }
    public virtual tbxdictionary tbxdictionary { get; set; }
    public virtual tmxheaderinterface tmxheaderinterface { get; set; }
    public virtual users users { get; set; }
    public virtual ICollection<taskstepexceptions> taskstepexceptions { get; set; }
    public virtual ICollection<tbxrelation> tbxrelation { get; set; }
    public virtual ICollection<tmproject> tmproject { get; set; }
    public virtual ICollection<tmrelation> tmrelation { get; set; }
    public virtual ICollection<wizardprojecttasks> wizardprojecttasks { get; set; }
    public virtual ICollection<works> works { get; set; }
}
}

3 个答案:

答案 0 :(得分:1)

你确定在不同套管的地方没有相同的命名属性吗?它编译为案例敏感,但执行时不区分大小写,因此即使同一名称属性中的一些大写字母差异也可能导致找到不明确的匹配异常。

答案 1 :(得分:1)

我遇到了同样的问题:

我有一个名为service的表格链接到表格order。 在我的部分班order中,我使用了一个名为Service的属性。

//Auto generated:
public virtual service service { get; set; }

//My custom property (Shortned, there was a big String.Format inside):
public String Service { get { return service.ds_name; }}

不区分大小写。 :/

TL; DR:Property inside partial class with the same name, but with diffferent caps.

答案 2 :(得分:0)

我解决了我的问题。我的代码中有一个非常模糊的东西。 CustomerStatus 真的被公开了。

我认为Entity Framework团队应该改进Ambiguous匹配发现的异常细节。我有超过90个表,很难调试......

这些代码出现异常:

public partial class customers
{
    public enum CustomerStatusEnum : long
    {
        Closed = 3,
        Open = 1,
        Potential = 2
    }

    public CustomerStatusEnum CustomerStatus
    {
        get
        {
            return (CustomerStatusEnum)Status;
        }
    }
}