【问题标题】:Ef code first error: EntityType: 'ModelName' has no key definedEf 代码第一个错误:EntityType: 'ModelName' has no key defined
【发布时间】:2021-09-06 07:29:21
【问题描述】:

我正在努力在我的项目中创建一个登录系统,但我遇到了一个异常错误。

错误看起来像这样:

这是我的Person 模型:

namespace Entities.Concrete
{
    public class Person:IEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public bool IsActive { get; set; }

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

这是我的User 模型:

namespace Entities.Concrete
{
    public class User:IEntity
    {
        [ForeignKey("Person")]
        public int PersonId { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public bool IsActive { get; set; }
        public DateTime LastLoginDate { get; set; }

        public int PersonForeignKey { get; set; }
        public Person Person { get; set; }
    }
}

我的上下文如下所示:

namespace DataAccess.Concrete.EntityFramework
{
    public class SchoolDBContext : DbContext
    {
        public SchoolDBContext():base("SchoolDB")
        {

        }
        public DbSet<Student> Students{ get; set; }
        public DbSet<Person> Persons { get; set; }
        public DbSet<User> Users { get; set; }

    }
}

最后,我的Login 方法如下所示:

        public bool Login(string username, string password)
        {

            using (TContext context = new TContext())
            {
                var user = (from p in context.Persons
                            join u in context.Users
                            on p.Id equals u.PersonId
                            where p.IsActive == false &&
                                u.UserName == username &&
                                u.Password == password &&
                                u.IsActive == true
                            select p).FirstOrDefault();
                if (user != null)
                    return true;
                return false;
            }
                
        }

我在 user 变量中遇到错误。

我不知道如何先用实体框架代码分配一个键。你能帮帮我吗?

【问题讨论】:

  • 您应该在用户类上添加一个 int Id。我认为有一个属性 [Key] 可以使用。
  • 你也可以发布 IEntity 吗?
  • @Serge Ientity 接口为空
  • @Ahmetfurkandur 你是什么意思 IEntity 是空的?那你为什么用它呢?
  • @serge 我在存储库基础设计模式中使用并在存储库中调用 IEntity

标签: c# sql-server entity-framework linq


【解决方案1】:

您没有用户的“Id”字段,因此它不知道用户类型的主键是什么。

EF默认使用Id,或者你可以使用Key属性指定你自己的。

添加

public int Id { 获取;放; }

到用户类类型

EF 核心文档也显示了在这里做什么 -> https://docs.microsoft.com/en-us/ef/core/modeling/keys?tabs=data-annotations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2020-03-31
    • 1970-01-01
    • 2017-08-24
    • 2015-11-23
    相关资源
    最近更新 更多