C# 向实体框架中的分部类添加接口无效

C# 向实体框架中的分部类添加接口无效,c#,asp.net,entity-framework,partial-classes,C#,Asp.net,Entity Framework,Partial Classes,我正在实体框架(v5)对象上使用分部类(.NET 4.5)。我向这个分部类添加了一个接口,但是针对这个接口测试EF对象是错误的,但是应该识别它,因为接口是在分部类上定义的。以下是我正在尝试的: public interface Product : ILastModified { public DateTime LastModified { get; set; } } 然后在我的数据层中,我尝试以下方法: public virtual int Update<T>(T TO

我正在实体框架(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();
    }
公共虚拟int更新(T TObject),其中T:class
{
//为什么总是假的?
如果(对象已ILastModified)
{
(TObject as ILastModified).LastModified=DateTime.Now;
}
var entry=dbContext.entry(TObject);
dbContext.Set().Attach(TObject);
entry.State=EntityState.Modified;
返回dbContext.SaveChanges();
}

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

您已经将
产品定义为一个接口,而不是一个类

应该是:

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();
}
公共虚拟int更新(T TObject),其中T:class,ILastModified
{
TObject.LastModified=DateTime.Now
var entry=dbContext.entry(TObject);
dbContext.Set().Attach(TObject);
entry.State=EntityState.Modified;
返回dbContext.SaveChanges();
}

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

您已经将
产品定义为接口而不是类

应该是:

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();
}
公共虚拟int更新(T TObject),其中T:class,ILastModified
{
TObject.LastModified=DateTime.Now
var entry=dbContext.entry(TObject);
dbContext.Set().Attach(TObject);
entry.State=EntityState.Modified;
返回dbContext.SaveChanges();
}

这样,如果传递的类型未实现接口,则会出现编译时错误。

但产品类是由Entity Framework生成的,然后我将向这个生成的类添加一个分部类您必须通过引入“ILastModified”接口来扩展分部
Product
类。但是产品类是由实体框架生成的,然后我将向这个生成的类添加一个分部类。您必须通过引入“ILastModified”接口来扩展分部
Product
类。产品是类还是接口?产品是类还是接口?