在我的项目中,我保留了几个类库来实现常用功能。其中一个有一个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属性存在于角色上但不存在于用户上。
我真的很感激,如果有人可以看看这里并帮我解决这个问题。如果没有解决这个问题,我无法继续开发系统。
提前致谢!
答案 0 :(得分:0)
您的泛型类不使用任何类型参数,因此您可以将其设置为非泛型。并且&#34; Pkey&#34;不是主键EF的约定。您应该将其重命名为&#34; Id&#34;或者你必须明确地将它定义为映射中的主键,如:
modelBuilder.Entity<Role>().HasKey(t => t.PKey);
modelBuilder.Entity<User>().HasKey(t => t.PKey);