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; }
    }

这是从父级继承的属性(这个在数据库中有一个表):

[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;
        }

然而问题是,当我查看数据库中的表定义时,我只看到 ProtectedPassword 的 2 个属性:密码和 PropertyId

我也想包含其他变量(例如所有者、名称等)

4

1 回答 1

1

简短回答:删除[Table]属性。

它导致模型中的继承通过Table-Per-Type (TPT)进行映射。用 TPT 属性将基类和派生类拆分为两个单独的表。

如果您想在一个表中拥有所有属性,您有两种选择:

  • 使用Table-Per-Hierarchy (TPH),基类和所有派生类的所有属性都将存储在一个表中。如果您不[Table]使用 Fluent API 添加属性或显式映射,TPH 是将应用的默认继承映射。

  • 使用Table-Per-Concrete-Type (TPC),继承层次结构中的每个具体类型都有自己的表,该表将在继承链中保存其属性及其基类的属性。实际上,在您的情况下,此映射无济于事,因为您的基类也是具体的,而不是abstract.

于 2013-06-29T16:41:34.760 回答