0

基本的に、エンティティを格納するテーブルに明らかに含めたい変数を持つ親を持つエンティティを作成しました。

親の定義は次のとおりです。

public class ProtectedProperty
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int PropertyId { get; set; }

        [Required]
        public string SubId { get; set; }

        public int Downloads { get; set; }

        [Required]
        public UserProfile Owner { get; set; }

        [Required]
        public string Name { get; set; }

        [Required]
        public ProtectedPropertyType Type { get; set; }
    }

親から継承するプロパティは次のとおりです (これには DB にテーブルがあります)。

[Table("ProtectedPassword")]
    public class ProtectedPassword : ProtectedProperty
    {

        [Required]
        //[StringLength(maximumLength:56)]
        [MinLength(3)]
        [MaxLength(20)]
        public string Password { get; set; }

        public ProtectedPassword(string name, UserProfile owner, string password)
        {
            Name = name;
            Owner = owner;
            Password = password;
            SubId = PublicUtility.GenerateRandomString(8, 0);
            Type = ProtectedPropertyType.Password;
        }

ただし、問題は、DB のテーブル定義を見ると、ProtectedPassword の 2 つのプロパティ (Password と PropertyId) しか表示されないことです。

他の変数 (所有者、名前など) も含めたいと思います。

4

1 に答える 1

1

簡単な答え:[Table]属性を削除します。

モデルの継承がTable-Per-Type (TPT)を介してマップされます。TPT を使用すると、基本クラスと派生クラスのプロパティが 2 つの個別のテーブルに分割されます。

1 つのテーブルにすべてのプロパティを含める場合は、次の 2 つのオプションがあります。

  • Table-Per-Hierarchy (TPH)を使用すると、基本クラスのすべてのプロパティとすべての派生クラスが 1 つのテーブルに格納されます。[Table]TPH は、 Fluent API で属性または明示的なマッピングを追加しない場合に適用されるデフォルトの継承マッピングです。

  • Table-Per-Concrete-Type (TPC)を使用すると、継承階層内のすべての具象型が独自のテーブルを取得し、そのプロパティと継承チェーン内の基本クラスのプロパティが保持されます。実際には、あなたの状況では、基本クラスも具象であり、そうではないため、このマッピングは役に立ちませんabstract

于 2013-06-29T16:41:34.760 に答える