1

Entity Framework(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)」を部分クラスに設定しても、常にfalseになることです。私は何か間違ったことをしていますか、それともこのようなことを達成する方法はありますか?

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 に答える