gpt4 book ai didi

entity-framework - 为什么 Entity Framework 没有按要求注释一些不可为空的列?

转载 作者:行者123 更新时间:2023-12-04 07:27:11 26 4
gpt4 key购买 nike

我首先使用带有数据库的 EF 4.1。

示例表:

CREATE TABLE dbo.Foo(
[ID] [int] IDENTITY(1,1) NOT NULL,
Created datetime not null default(getdate()),
Title varchar(80) not null

PRIMARY KEY CLUSTERED ([ID] ASC)
)

EF 将所有 3 列正确加载为 nullable = false 的模型。

代码生成项“ADO.NET DbContext Generator”的输出:
 public partial class Foo
{
public int ID { get; set; }
public System.DateTime Created { get; set; }
public string Title { get; set; }
}

在 MVC3 中,我生成 FooController通过 db 上下文和 foo 模型。当我打开/Foo/Create 并在空白表单上点击“Create”时,它会在“Created”字段上显示验证错误,但在“Title”上却没有。

如果我只输入“创建”日期,则会出现异常:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details



异常(exception)是“标题字段是必需的”。

我不确定为什么它适用于一列但不适用于另一列。我的第一个修复是简单地添加注释,但是类代码是由 EF 自动生成的。

唯一可行的修复方法是使用部分元数据类: ASP.NET MVC3 - Data Annotations with EF Database First (ObjectConext, DbContext)

我可以根据需要添加 [Required] 标签,但这应该是不必要的。这是 EF 中的错误还是我只是遗漏了什么?

最佳答案

这不是错误,EF 根本不添加这些属性。据我所知,数据库优先方法(设计者生成的实体类)甚至不执行验证。您引用的链接是您问题的有效解决方案。引入包含实际元数据的伙伴类的原则是因为您不能将属性添加到部分类中的现有属性。

代码优先方法具有验证注释的内置功能,请参阅:Entity Framework 4.1 Validation .使用数据库优先的另一个解决方案是创建一个自定义代码生成器来应用这些属性 T4 Templates and the Entity Framework .

关于entity-framework - 为什么 Entity Framework 没有按要求注释一些不可为空的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619594/

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