在Entity Framework中向部分类添加接口不起作用

Tru*_*an1 1 c# asp.net entity-framework partial-classes

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

public interface Product : ILastModified
{
  public DateTime LastModified { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

    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();
    }
Run Code Online (Sandbox Code Playgroud)

问题是"if(TObject是ILastModified)"总是假的,即使我在部分类上设置它.我做错了什么或有办法实现这样的事情吗?

Qui*_*rdt 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; }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

您不必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();
}
Run Code Online (Sandbox Code Playgroud)

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