有什么变化?我已经在生产环境中开发和部署这个 C# Razor 应用程序(SQL 后端)3 年了。最近,我在 SQL 中添加了 3 个新表,而不是使用 Package Manager 控制台来添加迁移,我只是手动编辑现有的 DBContext 类来添加三个新的 DbSet...
public virtual DbSet<PaymentPlan> oDbSetPmtPlan { get; set; }
在我的模型目录中添加了三个新类,并编辑了需要从新表获取数据的现有剃刀页面。我的本地数据库是生产的副本。每次我运行我的项目时,在尝试打开引用新表之一的页面时,我都会收到无效对象错误。
public IList<Models.PaymentPlan> OPmtPlansList { get; set; }
.
.
.
public async Task<IActionResult> OnGetAsync(string id)
{
.
.
OPmtPlansList = await _dbWriterContext.oDbSetPmtPlan.Where(m => m.ToBalance <= TotalBalanceDue).ToListAsync();
在 PaymentPlan 类中添加此标记后,我终于让它开始工作了,[Table("{SQL Server 中的表名称")]。
namespace Customer_BlahBlah.Models
{
[Table("PaymentPlan")]
public partial class PaymentPlan
{
[Key]
public Guid PlanId { get; set; }
我不明白。我的其他现有课程从未有此标记并继续工作,即 CRUD。我在 SSMS 中设计新表的方式没有什么不同。我比较了一切。调试逐步完成了所有内容,但它没有任何意义。
这些是我当前在项目中使用的版本...
Id Versions ProjectName
-- -------- -----------
Microsoft.Extensions.Configuration.UserSecrets {6.0.1} Customer Blah
IBM.Data.DB2.Core {3.1.0.600} Customer Blah
Microsoft.VisualStudio.Web.CodeGeneration.Design {5.0.2} Customer Blah
MailKit {3.3.0} Customer Blah
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation {6.0.8} Customer Blah
Microsoft.EntityFrameworkCore {6.0.8} Customer Blah
Microsoft.EntityFrameworkCore.SqlServer {6.0.8} Customer Blah
System.Linq.Dynamic.Core {1.2.19} Customer Blah
Microsoft.CodeAnalysis.CSharp.Workspaces {4.2.0} Customer Blah
EntityFramework.IBM.DB2 {6.4.1} Customer Blah
Microsoft.AspNetCore.Identity.EntityFrameworkCore {6.0.8} Customer Blah
Net.IBM.Data.Db2 {6.0.0.200} Customer Blah
EntityFramework {6.4.4} Customer Blah
Microsoft.EntityFrameworkCore.Relational {6.0.8} Customer Blah
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore {6.0.8} Customer Blah
Microsoft.AspNetCore.Identity.UI {6.0.8} Customer Blah
MimeKit {3.4.0} Customer Blah
Microsoft.EntityFrameworkCore.Tools {6.0.8} Customer Blah
IBM.EntityFrameworkCore {6.0.0.200} Customer Blah
16 有待更新,但是,我将推迟更新,直到我更好地了解这个奇怪问题当前发生的情况。
编辑添加脚本来创建上述表格。
CREATE TABLE [dbo].[PaymentPlan](
[PlanId] [int] IDENTITY(1,1) NOT NULL,
[FromBalance] [numeric](6, 2) NOT NULL,
[ToBalance] [numeric](6, 2) NOT NULL,
[MaxMonthsLimit] [int] NOT NULL,
CONSTRAINT [PK_PaymentPlan] PRIMARY KEY CLUSTERED
(
[PlanId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'The Plan Unique Identifier' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'PaymentPlan', @level2type=N'COLUMN',@level2name=N'PlanId'
GO
根据您发布的代码,您的
DbSet
名称:oDbSetPmtPlan
与 SQL Server 表的名称:PaymentPlan
不匹配。 EF Core 将查找以 DbSet
属性(不是其泛型类型)命名的表,除非您使用 DataAnnotations 或 Fluent API 指定不同的表名称(正如您最终所做的那样)。
这一直是 EF Core 遵循的约定。一切都没有改变。