gpt4 book ai didi

c# - 我收到错误 'EntityType has no key defined',即使我在模型和数据库中都定义了一个键

转载 作者:太空宇宙 更新时间:2023-11-03 22:28:55 26 4
gpt4 key购买 nike

I've been following this tutorial关于如何在 MVC 中处理多个表,我在尝试为索引创建 View (教程中的第 12 步)时遇到错误,指定“EntityType 没有定义键”。我能够找到的唯一解决方案是在模型类的主键成员之前放置一个 [Key] 属性。但是,当我尝试再次创建 View 时,出现了同样的错误。

Controller 代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using RelationalDatabaseWebsite.Models;

namespace RelationalDatabaseWebsite.Controllers
{
public class UsersTablesController : Controller
{
private ApprenticeTestEntities db = new ApprenticeTestEntities();

public ActionResult Index()
{
UsersLogContext cs = new UsersLogContext();
List<Log> logs = cs.Log.ToList();
return View(logs);
}

Log 模型的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;



namespace RelationalDatabaseWebsite.Models
{
[Table("LogTable")]
public class Log
{
[Key]
public int LogTableID { get; set; }

public int UserID { get; set; }
public string TimeLogged { get; set; }

public virtual UsersTable Users { get; set; }
}
}

用户模型代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;


namespace RelationalDatabaseWebsite.Models
{
[Table("UsersTable")]
public class Users
{
[Key]
public int UserID { get; set; }

public string FirstName { get; set; }
public string Surname { get; set; }
public string Password { get; set; }
public string Salt { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
public bool IsAdmin { get; set; }

public virtual ICollection<AddressTable> Address { get; set; }
public virtual ICollection<DOBTable> DOB { get; set; }
public virtual ICollection<LogTable> Log { get; set; }


}
}

DbContext 模型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace RelationalDatabaseWebsite.Models
{
public class UsersLogContext : DbContext
{
public DbSet<Users> Users { get; set; }
public DbSet<Log> Log { get; set; }

}
}

用户数据库表

CREATE TABLE [dbo].[UsersTable](
[UserID] [uniqueidentifier] NOT NULL,
[FirstName] [varchar](50) NOT NULL,
[Surname] [varchar](50) NOT NULL,
[Password] [varchar](50) NOT NULL,
[Salt] [varchar](50) NOT NULL,
[PhoneNumber] [varchar](50) NULL,
[Email] [nvarchar](50) NOT NULL,
[IsAdmin] [bit] NOT NULL,
CONSTRAINT [PK_UsersTable] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

日志数据库表

CREATE TABLE [dbo].[LogTable](
[LogTableID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [uniqueidentifier] NOT NULL,
[TimeLogged] [datetime] NOT NULL,
CONSTRAINT [PK_LogTable_1] PRIMARY KEY CLUSTERED
(
[LogTableID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[LogTable] WITH CHECK ADD CONSTRAINT [FK_LogTable_UsersTable] FOREIGN KEY([UserID])
REFERENCES [dbo].[UsersTable] ([UserID])
GO

ALTER TABLE [dbo].[LogTable] CHECK CONSTRAINT [FK_LogTable_UsersTable]
GO

对于大量代码表示歉意,只是因为日志和用户表都出现了错误,我会把这两部分都记下来,以防各自的错误相互关联。

最佳答案

您的 Users 表的键类型为 uniqueidentifier 但您的代码模型的键类型为 int

[Key]
public int UserID { get; set; }

...

[UserID] [uniqueidentifier] NOT NULL,

尝试将用户模型中的键(及其在 Log 模型中的相关属性)更改为 Guid...

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UserID { get; set; }

关于c# - 我收到错误 'EntityType has no key defined',即使我在模型和数据库中都定义了一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59211902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com