实体框架 6 - 数据库优先 - 缺少字符串长度属性

Posted

技术标签:

【中文标题】实体框架 6 - 数据库优先 - 缺少字符串长度属性【英文标题】:Entity Framework 6 - Database First - String Length Attribute missing 【发布时间】:2021-11-13 13:11:13 【问题描述】:

我首先使用 EF6 数据库来创建我的 EF 6 DB 上下文。创建的 POCO 缺少属性属性,例如“StringLength”或“Required”。在为我创建这些项目之前,我一直在从事项目,并认为这是基本功能。在哪里可以找到有关如何配置此行为的文档?

从一个新的 Winform 应用程序中,我向我的项目中添加了一个新的 ADO.Net 实体数据模型,并按照向导“从数据库进行 EF 设计”。

环境

新的 .Net Framework 4.72 Winform 应用程序 EF 6 C#

【问题讨论】:

这意味着您创建了一个老式的 EDMX。使用“数据库中的代码优先”。 你是说它在创建 POCO 时使用了 EF 5?我认为这是不可能的,因为该项目仅引用 EF6。 不,我没有这么说。 EDMX 也可以在 EF6 中使用,只是老式风格。 如何生成新样式的 EDMX? 你不懂。 EDMX 是老式的。试试我提到的另一个选项。 【参考方案1】:

我知道发生了什么。默认情况下Scaffold-DBContext's parameter DataAnnotations 默认使用Fluent API。 Fluent API 使用上下文的 OnModelCreating 方法中的函数链接来配置属性。 DataAnnotations 参数是一个开关,因此只需指定该参数即可将引擎更改为使用 Data Annotations。

这很重要,因为我也在 E​​F 之外使用 EF 模型。将它们与 ASP.net 一起使用有很大的好处,因为它将在请求期间使用注释来验证模型。

【讨论】:

以上是关于实体框架 6 - 数据库优先 - 缺少字符串长度属性的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 6 代码优先触发器

从数据库优先实体框架 6.2 中的 SaveChanges 中删除标识列

实体框架代码优先 MaxLength 和 FixedLegth(char 与 varchar)

Base64 字符串的实体框架列类型

实体框架6.2代码优先错误

如何将实体框架(代码优先)与动态创建的连接字符串和单文件数据库一起使用?