EF Fluent Api 是不是可以设置最小长度?

Posted

技术标签:

【中文标题】EF Fluent Api 是不是可以设置最小长度?【英文标题】:Does the EF Fluent Api can setting the Minimum Length?EF Fluent Api 是否可以设置最小长度? 【发布时间】:2015-12-30 16:24:37 【问题描述】:

似乎使用 Fluent API 具有更大的灵活性。

所以我选择遵循的方式总是使用 Fluent API 来确定它在 db 中具有的功能而不是使用注解来。

但是问题来了,我找不到设置最小长度的方法。 有没有办法做到这一点?

我注意到,这种方式讨论的话题不多。Fluent API 方式流行吗??

希望我们选对的。

【问题讨论】:

在必须的数据库中,如果不是全部,字符串列上不存在最小长度约束,所以没有必要将它添加到 Fluent 映射 api。 我明白了。我对数据库的列规范和 POCO 属性限制感到困惑。谢谢~ E-Bat 【参考方案1】:

目前使用 EF 是不可能的。如果你真的需要设置一个最小长度,你可以用一个属性来做:

[MaxLength(10),MinLength(3)]
public string MyProperty get; set;

正如您问题下的第一条评论已经说过的那样,在数据库中检查最小长度可能并不常见(我自己从未见过),因此当您尝试输入具有长度的值时,这只会引发验证错误小于 3。

【讨论】:

谢谢你的回答,Alex。但是我仍然对附加注释后对数据库的影响感到好奇。可以同时使用注解和 Fluent API 吗?注释是否很容易验证函数参数? 是的,同时使用注释和流利的 api 也不错。我尝试使用注释尽可能多地验证属性,因为当您查看模型时会更清楚地看到。我尽量在fluent api中保持实体之间的关系。 对不起,我正在阅读maximum,这个答案确实是正确的。 fluent API 不是用来验证的(尽管它也这样做了),它是用来配置 DB 架构的,并且 SQL 服务器中没有“最小长度”(这基本上是 EF6 支持的)直到 EF7),所以这就是它不存在的原因。 EF7 未来会带来什么仍然是个谜 :-)【参考方案2】:

对于字符串属性使用 StringLength

[StringLength(30, MinimumLength = 5)]
public string MyStringProperty  get; set; 

https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute%28v=vs.110%29.aspx

【讨论】:

我想知道 Fluent API 的方式还是谢谢你的回复。 @Cyrus 这个问题显然是在寻求使用 Fluent Api 的解决方案。请在发布答案之前仔细阅读问题【参考方案3】:

也许这个问题的回复晚了,仍然没有办法指定使用 Fluent API。

但我们可以使用 Fluent API 从 Check 约束中确保数据长度大于某个长度。

builder.HasCheckConstraint("CHK_DocumentLogo_ExtensionHasAtleastOneChar", "(DATALENGTH([Extension]) > 0)");

您需要安装 Microsoft.EntityFrameworkCore.Relational NuGet 包才能使用此扩展方法。

有关 HasCheckConstraint 的更多信息 - https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.relationalentitytypebuilderextensions.hascheckconstraint?view=efcore-5.0

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于EF Fluent Api 是不是可以设置最小长度?的主要内容,如果未能解决你的问题,请参考以下文章

EF Core中通过Fluent API配置多对多关系

EF Core中通过Fluent API配置多对多关系

EF Core中通过Fluent API配置多对多关系

EF CodeFirst 之 Fluent API

EF 6.X 中的实体框架代码优先 Fluent API 默认值

EF Core Fluent API