0

ここでEntity Framework 5に問題があります

私のプログラムでは、次のように定義された基本クラスがあります。

public abstract class CoreProduct
{
    public abstract decimal Price { get; set; }
    public abstract decimal CategoryID { get; set; }
    public abstract decimal Quantity { get; set; }

    public decimal CalculatePrice()
    {
       //Code to calculate the price here
    }
}

特定のクラスを Entity Framework によって自動生成してこのクラスから継承し、数量などを考慮して価格を計算できるようにしたい.

そこで、通常の製品用に新しいファイルを作成して、次のようにしました。

public partial class Product : CoreProduct
{
    public override decimal Price { get; set; }
    public override decimal CategoryID { get; set; }
    public override decimal Quantity { get; set; }
}

しかし、Price、CategoryID、および Quantity フィールドは Entity Framework によって自動生成されるため、EF によって自動生成されたファイルからそれらを削除する必要があり、すべてが機能します。

私の問題は、モデルを更新する必要があるたびに、コードが再び自動生成され、CoreProduct クラスを継承するすべてのクラスのすべてのフィールドを手動で再削除する必要があることです。

モデルを更新するたびに 50 個のフィールドを手動で削除する必要がないようにするには、これを達成するためのより良い方法は何でしょうか?

4

1 に答える 1

3

すべてのサブクラスに追加するインターフェイスを作成し、実際の計算を行う拡張メソッドを作成できます。

たとえば、次のインターフェイスがあります。

public interface ICoreProduct
{
    decimal Price { get; set; }
    decimal Quantity { get; set; }
}

製品をそのインターフェースにアタッチするための2番目の部分クラスを作成しました

public partial class Product : ICoreProduct
{
}

そして、ICoreProduct の拡張メソッドを作成します。

public static decimal CalculatePrice(this ICoreProduct product)
{
    return product.Price * product.Quantity;
}

その後、これらの行に沿って何かを行うことができるはずです:

Product prod = new Product();
prod.Price = 2;
prod.Quantity = 10;
decimal price = prod.CalculatePrice();
于 2013-11-03T15:06:01.157 に答える