实体框架:没有 Id 的通用比较类型?

发布于 2024-12-28 07:20:42 字数 484 浏览 1 评论 0原文

无论如何,是否可以在没有 ID 的对象的情况下对对象之间的相等性进行比较?

我正在尝试做一个典型的通用更新,为此我在网上看到了很多例子,但它们通常看起来都是这样的:

public void Update(TClass entity)
{
    TClass oldEntity = _context.Set<TClass>().Find(entity.Id);
    foreach (var prop in typeof(TClass).GetProperties())
    {
        prop.SetValue(oldEntity, prop.GetValue(entity, null), null);
    }
}

或类似的东西。我的系统的问题是,并不是每个类都有一个名为 Id 的属性,具体取决于在类上,Id 可以是 ClassnameId。那么,我是否可以通过 LINQ 检查是否存在并返回这样的实体,而无需一般提供任何属性?

Is there anyway to do a comparison between objects for equality generically without objects having an ID?

I am trying to do a typical generic update, for which I have seen many examples of online, but they all usually look something like this:

public void Update(TClass entity)
{
    TClass oldEntity = _context.Set<TClass>().Find(entity.Id);
    foreach (var prop in typeof(TClass).GetProperties())
    {
        prop.SetValue(oldEntity, prop.GetValue(entity, null), null);
    }
}

or something similar.The problem with my system is that not every class has a property named Id, depending on the class the Id can be ClassnameId. So is there anyway for me to check for the existence of and return such an entity via LINQ without supplying any properties generically?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

琉璃繁缕 2025-01-04 07:20:42

尝试

public void Update(TClass entity)
{
    var oldEntry = _context.Entry<TClass>(oldEntity);

    if (oldEntry.State == EntityState.Detached)
    {
         _context.Set<TClass>().Attach(oldEntity);
    }

    oldEntry.CurrentValues.SetValues(entity);
    oldEntry.State = EntityState.Modified;
}

Try

public void Update(TClass entity)
{
    var oldEntry = _context.Entry<TClass>(oldEntity);

    if (oldEntry.State == EntityState.Detached)
    {
         _context.Set<TClass>().Attach(oldEntity);
    }

    oldEntry.CurrentValues.SetValues(entity);
    oldEntry.State = EntityState.Modified;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文