1

我在我的实体框架 (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();
    }

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

4

1 回答 1

6

您已将您的定义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();
}

这样,如果您传递的类型未实现接口,您将获得编译时错误。

于 2013-01-21T19:06:11.060 回答