【问题标题】:Adding interface to partial class in Entity Framework does not work在实体框架中向部分类添加接口不起作用
【发布时间】:2013-01-21 19:03:12
【问题描述】:

我在我的实体框架 (v5) 对象上使用部分类 (.NET 4.5)。我为这个分部类添加了一个接口,但是针对这个接口测试EF对象是错误的,但是应该可以识别为该接口是在分部类上定义的。这是我正在尝试的:

public interface Product : ILastModified
{
  public DateTime LastModified { get; set; }
}

然后在我的数据层我正在尝试这个:

    public virtual int Update<T>(T TObject) where T : class
    {
        //WHY ALWAYS FALSE?
        if (TObject is ILastModified)
        {
          (TObject as ILastModified).LastModified = DateTime.Now;
        }

        var entry = dbContext.Entry(TObject);
        dbContext.Set<T>().Attach(TObject);
        entry.State = EntityState.Modified;
        return dbContext.SaveChanges();
    }

问题是“if (TObject is ILastModified)”总是错误的,即使我将它设置在部分类上。我做错了什么还是有办法实现这样的目标?

【问题讨论】:

  • Product 是一个类还是一个接口?

标签: c# asp.net entity-framework partial-classes


【解决方案1】:

您已将 Product 定义为接口而不是类。

应该是:

interface ILastModified {
{
    DateTime LastModified { get; set; }
}

public partial class Product : ILastModified
{
    /* this prop is declared in the Ef generated class   */
    //public DateTime LastModified { get; set; }
}

编辑:

您不必使用 Is 来更改您的方法:

public virtual int Update<T>(T TObject) where T : class, ILastModified
{
    TObject.LastModified = DateTime.Now

    var entry = dbContext.Entry(TObject);
    dbContext.Set<T>().Attach(TObject);
    entry.State = EntityState.Modified;
    return dbContext.SaveChanges();
}

如果你传递的类型没有实现接口,这样你会得到编译时错误。

【讨论】:

  • 但是 Product 类是由实体框架生成的,然后我在这个生成的类中添加一个部分类
  • 您必须通过引入 `ILastModified' 接口来扩展部分 Product 类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
相关资源
最近更新 更多