当前位置:  开发笔记 > 编程语言 > 正文

实体框架正在忽略NotMapped属性

如何解决《实体框架正在忽略NotMapped属性》经验,为你挑选了1个好方法。

尝试保存更改时收到以下异常:System.Data.SqlClient.SqlException:无效的列名'ClientID'。无效的列名“ ID”。

ClientID属性具有[NotMapped]属性,并且该类没有ID属性。此外,数据库表匹配正确的属性。我知道有时候,当您具有没有关联FK的导航属性时,EntityFramework会创建隐式外键列,但是这里不是这种情况。

public class AccountPreference :  fgleo.Objects.PortfolioManagement.IAccountPreference
{
    #region Constructors

    public AccountPreference() { }

    #endregion

    #region Fields & Properties

    public Guid Guid { set; get; }

    [ForeignKey("Account"), Key]
    public int AccountID { set; get; }
    public virtual tAccount Account
    {
        get;
        set;
    }

    public string Nickname { set; get; }


    public string AccountType { set; get; }


    public string InsuranceCompanyName { set; get; }


    public string PolicyName { set; get; }


    public ContainerType ContainerType { set; get; }


    public bool Hide { set; get; }


    public bool IsActive { set; get; }


    public bool IsReviewed { set; get; }


    public bool IsPreserved { set; get; }


    public bool IsImplemented { set; get; }


    public bool AllocateByAccount { set; get; }


    public bool IsActivelyManaged { set; get; }


    public int AccountRiskTolerance { set; get; }

    public decimal? BalanceAtAccountLock { set; get; }


    public bool AddCashHolding { set; get; }


    public bool RefreshCalcs { set; get; }


    public bool UsePortfolioOverride { set; get; }


    public bool UseBestOfClassOverride { set; get; }


    public bool UseSavedRecommendations { set; get; }


    public bool WaitingForTimer { set; get; }


    public AccountPendingStatus PendingStatus { set; get; }


    public DateTime? DatePendingChange { set; get; }

    [NotMapped]
    public int ClientID
    {
        get
        {
            return (int) ClientIDNullable;
        }
        set
        {
            this.ClientIDNullable = value;
        }
    } 

    public virtual Client Client { get; set; }
    [ForeignKey("Client")]
    public int? ClientIDNullable { get; set; }


    #endregion


}

最奇怪的是,此代码在本地可以很好地工作,但不能在我们的生产环境中使用。我检查了数据库,它似乎是相同的。



1> 小智..:

如果没有更多信息或代码示例,就无法知道是否使用Fluent API。

对于Fluent API,您还可以使用OnModelCreating事件来忽略属性,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity().Ignore(t => t.ClientID );
   base.OnModelCreating(modelBuilder);
}

这是一些有用的信息。

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有