1

私たちはゼロから開発しているのでEntity Framework 6.1、MVCアプリケーションでcode-firstandtable-per-hierarchyアプローチを使用しており、この方法は迅速な開発に適していると考えています。しかし、ここで質問があります。1 つの基本クラスと 3 つのサブクラスがあるとします。これらは次のようになります。

public class BaseClass
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class SubClassOne : BaseClass
{
    public double Volume { get; set; }        
}

public class SubClassTwo : BaseClass
{
    public double Volume { get; set; }
}

public class SubClassThree : BaseClass
{
    public int Number { get; set; }
}

既定の設定を使用する場合、EF はデータベース テーブルに 6 つの列を作成します: ID、名前、ボリューム、ボリューム 1、番号、ディスクリミネーター。Volume 列は SubClassOne にのみ使用され、Volume1 は SubClassTwo にのみ使用され、Number は SubClassThree にのみ使用されます。

データベースの行スペースの「無駄」についてはあまり気にしません。しかし、ここで私を悩ませていることが 1 つあります。私が新しい開発者で、データベースを直接見ている場合、「Volume」と「Volume1」の名前に混乱してしまいます。コード側には SubClassOne と SubClassTwo があり、どちらにも「Volume」という名前のプロパティがあることを知っています。しかし、どの列がどのクラスのものかはわかりませんでした。だから私の質問は、データベース内の列にSubClassOne.Volumeとの両方SubClassTwo.Volumeがマップされていることを Entity Framework (たとえば、属性を使用して) に指示する方法はありますか? Volume(別の利点は、1 つの列を減らすことですが、それは私の主な目標ではありません)。

Entity Framework、code-first、または table-per-hierarchy を使用せず、テーブル、特に DAL を自分で設計すれば、完全に制御してこれを達成できると思います。しかし、今はどうですか?

4

1 に答える 1

1

属性 [Column("Volume1")] と [Column("Volume2")] を両方のクラスに使用できるため、関連するデータベース列にマップでき、同じプロパティ名 "Volume" を持つことができます。

public class BaseClass
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class SubClassOne : BaseClass
{
    [Column("Volume1")]   
    public double Volume { get; set; }        
}

public class SubClassTwo : BaseClass
{
    [Column("Volume2")] 
    public double Volume { get; set; }
}

public class SubClassThree : BaseClass
{
    public int Number { get; set; }
}

これは問題なく動作します。疑問がある場合は教えてください。

于 2015-11-19T10:15:12.257 に答える