【问题标题】:with ef 4.1 code first how can i create a nullable column首先使用 ef 4.1 代码我如何创建一个可为空的列
【发布时间】:2011-05-15 20:39:55
【问题描述】:

我有以下 POCO:

Public Class T1

<Required()>
<MaxLength(128)>
<Key(), Column(Order:=0)>
Property K1 As String

<Required()>
<MaxLength(128)>
<Key(), Column(Order:=1)>
Property K2 As String

<Required()>
Property C1 As String

Property C2 As String

end Class

我希望 C2 被创建为 Nullable,但 C1 和 C2 都不是 Null。添加

    <Required(AllowEmptyStrings:=True)>

没有什么区别,因为装饰似乎是针对数据验证,而不是创建数据库。

那么我如何使用 Code First 获得可为空的列?

【问题讨论】:

  • 在@Ladislav 的帮助下,我找到了流畅 API 的以下语法:modelBuilder.Entity(Of T1)().Property(Function(t) t.C1).IsOptional()
  • 最后一点 - 正如@Ladislav 指出的那样,将 C1 声明为整数就足够了吗?获得一个可为空的列 - 不需要流畅的 API。

标签: vb.net entity-framework-4 ef-code-first nullable code-first


【解决方案1】:

没有办法说string 属性可以通过属性为空,因为如果您不使用RequiredAttribute 标记属性,这是默认行为。在流畅映射的情况下,您可以将其描述为:

context.Entity(Of T1)().Property(Function(t) t.C2).IsNullable(True)

【讨论】:

  • 谢谢。如上所述,省略 属性仍会导致 NOT Null 列。我会试试你流畅的 API 建议。
  • 如果我省略了所需的值(唯一的区别是我使用的是 C#)我会得到可为空的列。尝试删除您的数据库并再次运行代码。
  • 你是对的 - 对于字符串。我没有正确测试,但正如你所说 - 对于字符串 Nullable 是默认值。对于其他类型——无论如何都是整数,需要流畅的 API。最终使用了稍微不同的语法,因为我不认为 IsNullable 是 Property 的成员。最终代码在我的问题的备注中 - 感谢您的帮助。
  • 如果你想为空的int你必须使用int?并且你不需要流利的api。
  • context 来自哪里?我尝试了OnModelCreating,我的班级MyContext(派生自DBContext)的上下文,但找不到IsNullable。仅限IsModified
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多