dbqtext.set上的linq to entity<>

时间:2016-05-08 07:43:34

标签: entity-framework entity-framework-6

我有多个数据库,1个常见数据库和n个公司数据库。我首先使用代码,一个迁移用于公共,一个用于公司db。

我有一个基本上下文,它继承到2个上下文(common,company)。我尝试只使用基本上下文并删除指定的上下文,到目前为止没问题。

我的问题是,如果我尝试在context.Set<>上使用linq然后我得到一个InvalidOperationException“实体类型NOCompany不是当前上下文模型的一部分”。

using (NOContext db = new NOContext(connection)) {
    var dbset = db.Set<NOCompany>()
        .Where(company => (company.Deleted == null) || (company.Deleted == false));

    foreach (var item in dbset) {
        System.Diagnostics.Debug.WriteLine(item.Matchcode);
    }
}

如果我使用这个

using (NOContext db = new NOCommonContext(connection)) {
    var dbset = db.Set<NOCompany>()
        .Where(company => (company.Deleted == null) || (company.Deleted == false));

    foreach (var item in dbset) {
        System.Diagnostics.Debug.WriteLine(item.Matchcode);
    }
}

然后它工作正常。问题出在哪儿?

摘自班级

public class NOContext : DbContext, INOContext
{

    public NOContext() { }
    public NOContext(string connection) : base(connection) { }

    #region - override DbContext -
    public override int SaveChanges()
    {
        foreach (var entry in ChangeTracker.Entries<EntityBase>()) {
            DateTime currentDateTime = DateTime.Now;

            var entity = entry.Entity;

            if (entry.State == EntityState.Added) {
                entity.CreateDate = currentDateTime;
                entity.CreateId = NOEngine.SessionInfo.CurrentUserId;
            } else if (entry.State == EntityState.Deleted) {
                entry.State = EntityState.Modified;
                entity.Deleted = true;
                entity.DeletedDate = currentDateTime;
                entity.DeletedId = NOEngine.SessionInfo.CurrentUserId;
            }
            entity.ModifiedDate = currentDateTime;
            entity.ModifiedId = NOEngine.SessionInfo.CurrentUserId;
        }

        return base.SaveChanges();
    }
    #endregion

    //database methods

}

然后我有2个指定的上下文

public class NOCommonContext : NOContext
{
    public const string CommonCatalog = "NOCommonDb";

    public NOCommonContext() { } 
    public NOCommonContext(string connection) : base(connection) { }

    #region - DbSets -
    public virtual DbSet<NOUser> Users { get; set; }
    public virtual DbSet<NOCompany> Companies { get; set; }
    public virtual DbSet<NOConfig> AppConfiguration { get; set; }
    #endregion //DbSets
}

public partial class NOAppContext : NOContext
{

    public NOAppContext() { }
    public NOAppContext(string connection) : base(connection) { }

    #region - DbSets -
    public virtual DbSet<BPCard> BPCards { get; set; }
    public virtual DbSet<BPContact> BPContacts { get; set; }
    public virtual DbSet<HRCard> HRCards { get; set; }
    #endregion //DbSets
}

0 个答案:

没有答案