无效的列名错误,尽管它存在于 Core ASP.NET

Invalid column name error although it exists ASP.NET Core

提问人:Virus 32 提问时间:9/30/2023 最后编辑:marc_sVirus 32 更新时间:10/2/2023 访问量:122

问:

我正在为会计软件(C# Winforms)设计一个在线商店(ASP.NET Core 6)。

我使用 ASP.NET Core 和 Razor 页面开始了此操作。

我是这个领域的新手,没有经验。记帐软件在 SQL Server 中有许多表,这些表相互关联。 我尝试只为我的项目所需的表格制作模型。

但是在与所需表通信时,:(出现以下错误。

列名称“MobileNo”无效。
列名称“BankAccountNumber”无效。
列名称“BankBranch”无效。
列名“BirthDate”无效。
列名称“BrithLocation”无效。
....

我知道此错误是由于所需表与其他表的关系造成的。

因为在其他类似情况下,当我定义第二个表和关系时,这个错误得到了解决。

....
public string UserID { get; set; }
....
[ForeignKey(nameof(UserID))]
public virtual SalCustomer users { get; set; }
....

但是我遇到了一个与其他表(不需要的表)非常相关的表。

我觉得创建额外的模型是不对的,我不喜欢将它们添加到我的项目中。

EF 中有什么方法可以忽略关系吗?不会在会计软件中引起问题?

因为在我的项目中不需要这些关系。

例如:

客户表与税务文件表或支票表之间的关系,以及...表太多了。

即使我不需要它们,在我的项目中创建所有表是否更好?

生成此错误的代码示例。

var accPerson = _context.AccPerson.SingleOrDefault(c => c.mobileNo == SD.userPh1);

我为我糟糕的英语道歉,并提前感谢您的宝贵意见。

我读了这篇文章,但我认为这些关系将被完全删除,这可能会导致会计软件出现问题。 我无法对数据库进行任何更改。 因为许多公司和软件都在使用这个数据库。

C# asp.net 实体框架 ASP.NET 核心 SQL-Server-2008

评论

1赞 Thom A 9/30/2023
仅供参考,SQL Server 2008 在 4 年前完全不受支持;您早就该实施(大概是一段时间)最终的升级计划了。
0赞 Virus 32 9/30/2023
@ThomA 主要的会计软件使用2008,数据库最初是用它设计的,但我为我的项目恢复了数据库到SQL Server 2022的备份......这就是为什么同时进行面对面销售和在线销售的地方使用 SQL Server 2022 中的数据库的原因。无论如何,这似乎与当前的问题没有任何关系。

答:

0赞 Fabio Caruso 10/1/2023 #1

正确的选择可能是先创建一个 EF 项目数据库。Visual Studio 将为你生成模型。因为您不能忽略关系来更新数据库行:您会在外键属性中放置哪些值?

评论

0赞 Virus 32 10/1/2023
我手动创建了模型,几乎类似于数据库第一个模型,甚至只定义了所需的列:)而且我从不使用迁移(我不能使用它),因为数据库中最小的更改可能会导致许多问题。在此事件之前,需要相关的表,我也曾经对它们进行建模。我仍然不知道我是否开始了正确的事情 我们有 114 张桌子,其中只需要 22 张
1赞 Anish 10/2/2023 #2

使用 Ef 核心数据库优先方法时,可以指定要生成的表。

Scaffold-DbContext 'Connection string' Microsoft.EntityFrameworkCore.SqlServer -Tables Customer, Purchases, Accounts, Contracts

有关脚手架的更多信息

如果您想要更多控制权,可以了解 T4 模板的工作原理(如果您是初学者,可能会有点复杂)

使用 T4 模板进行逆向工程

评论

0赞 Virus 32 10/2/2023
谢谢你的评论,但是我不想创建表什么的,我只想忽略关系,我觉得应该有一个像[NotMapped]这样的属性或者......
0赞 Anish 10/3/2023
您不必创建任何表。遵循代码优先方法时,EF 将仅添加命令中提到的表,并且仅生成这些表的关系。因此,您不必担心不会使用的表。希望能有所帮助。