通用存储库返回同一列表中的不同对象<>

时间:2017-06-23 09:11:26

标签: c# entity-framework linq dynamic repository

我今天遇到了一个有趣的问题。我在大多数项目中都使用了通用存储库,例如:

public interface IGenericRepository<T> where T : class
{
    IEnumerable<T> CokGetir(Expression<Func<T, bool>> predicate);
    T Getir(Expression<Func<T, bool>> predicate);
    void Ekle(T entity);
    void Duzenle(T entity);
    void Sil(T entity);
}

CokGetir在哪里:

public IEnumerable<T> CokGetir(Expression<Func<T, bool>> predicate)
{
    if (predicate != null)
    {
        return _objectSet.Where(predicate);
    }
    return _objectSet.AsEnumerable();
}

在代码中清楚,此方法返回LINQ中询问的对象列表。

我在此项目中使用SignalR并连接到SQL数据库以存储用户消息和详细信息。当我调用CokGetir方法来获取以下频道中的最新用户时:

var kullanicilar = _uow.Depo<ChatUserDetails>().CokGetir(p => p.YayinId.Equals(yayinId)).ToList();
  

kullanicilar变量包含2个不同的对象(因为有2个用户连接)。一个是数据对象&#39; Veri.ChatUserDetails&#39;另一个是&#39; {System.Data.Entity.DynamicProxies.ChatUserDetails_CF31378E4F985AB5B3AD99CDFCE21159AF26DDCA5BFBBB19F31B31537C3DEBA0}&#39;如图所示:

Different Objects

我需要动态对象(两者),因为它保存与其他表的关系;另一方面,Veri.ChatUserDetails没有它们。什么可能导致这种混乱?我不想在使用此动态存储库时使用普通dbContext,那么我该如何克服这种情况呢?

修改

ChatUserDetails根据要求:

public partial class ChatUserDetails
{
    public int ID { get; set; }
    public string ConnectionId { get; set; }
    public string KullaniciId { get; set; }
    public int YayinId { get; set; }

    public virtual AspNetUsers AspNetUsers { get; set; }
    public virtual YAY_Yayinlar YAY_Yayinlar { get; set; }
}

编辑2:

这是第二次编辑,其中包含有关该主题的更多信息。如果用户第一次连接到集线器,则不会发生此问题。但是,当用户刷新网页时, SignalR 会重新分配用户的ConnectionId并将其重新注册到聊天频道。此时,kullanicilar个对象中的一个丢失了与表的所有关系。

此外,正如我所观察到的,在新用户连接时,第一次运行时kullanicilar有2个不同的对象(数据和动态对象),并且它们都与其他表有关系。如上所述,当用户刷新页面时,它会丢失关系 我真的很困惑。

0 个答案:

没有答案