通过通用继承创建的属性不存在

时间:2014-06-25 09:04:30

标签: c# generics abstract-class code-first

在我的项目中,我保留了几个类库来实现常用功能。其中一个有一个LoganBaseObject类

此类将通用列添加到我设计的表中,代码优先(主键列,创建/编辑数据的时间和人员等)。

我通过继承代表我的数据库中的表的类来实现这个类,但是,我很困惑,因为它在其中一个类上工作正常,但在另一个类上完全没有(或者它看起来如此) )。见下文:

这里是LoganBaseObject

namespace Logan.Base
{
    public abstract class LoganBaseObject<T>
        where T : LoganBaseObject<T>
    {
        [Key]
        public Int64 PKey { get; set; }

        public LoganBaseObject()
        {
            PKey = 0;
        }
    }
}

以下是我实施此课程的课程。 Role的实现工作正常,但User类没有获得PKey属性......

namespace Logan.Web.Objects
{
    public class Role : LoganBaseObject<Role>
    {
        public string RoleName { get; set; }

        public virtual ICollection<User> Users { get; set; }

        public Role()
        {
            RoleName = String.Empty;
            Users = new List<User>();
        }
    }

    public class User : LoganBaseObject<User>
    {
        public string Username { get; set; }
        public string EmailAddress { get; set; }
        public string Password { get; set; }
        public string Biography { get; set; }
        public virtual Role Role { get; set; }

        public virtual ICollection<Article> Articles { get; set; }

        public User()
        {
            Username = String.Empty;
            EmailAddress = String.Empty;
            Password = String.Empty;
            Biography = String.Empty;
            Articles = new List<Article>();
        }
    }
}

我在Logan.Web.Objects中的任何一个类中都没有看到任何差异,因此我无法理解为什么PKey属性存在于角色上但不存在于用户上。

我真的很感激,如果有人可以看看这里并帮我解决这个问题。如果没有解决这个问题,我无法继续开发系统。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您的泛型类不使用任何类型参数,因此您可以将其设置为非泛型。并且&#34; Pkey&#34;不是主键EF的约定。您应该将其重命名为&#34; Id&#34;或者你必须明确地将它定义为映射中的主键,如:

modelBuilder.Entity<Role>().HasKey(t => t.PKey);
modelBuilder.Entity<User>().HasKey(t => t.PKey);