使用 Entity Framework 6 强制两列之一不为 NULL

2024-05-07

我有一个如下表:

[Table("tblStore")]
public class Store
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public string Option1 { get; set; }

    [Required]
    public string Option2 { get; set; }

    [Required]
    public DateTime Created { get; set; }
}

我需要强制指定 Option1 或 Option2 (不为空)。有人可以建议一种使用 EF 6 做到这一点的方法吗?


你可以做一个技巧:向你的 POCO 类添加新属性,这将是串联的结果Option1 and Option2并设置为这个属性(让我们称之为Options) 属性[Required]。当然,我们需要删除这个属性Option1 and Option2属性,以便可以分配给它们null价值观。现在,如果Option1 and Option2不会有价值观,Options也将是空白的,因为[Required]属性,当您尝试将此实体插入数据库时​​,将引发 EF 的错误:

public class Store
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    public string Name { get; set; }

    public string Option1 { get; set; }        
    public string Option2 { get; set; }

    [Required]
    public string Options { get { return Option1 + Option2; } private set { } }

    [Required]
    public DateTime Created { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Entity Framework 6 强制两列之一不为 NULL 的相关文章

  • 重写方法时,我的自定义代码应该位于 super(base) 之前还是之后

    重写方法时 我的自定义代码应该在对父类的超级 基 调用之前还是之后 这里有 3 个选择 如果你想执行代码之前的基本行为 然后之前调用它 如果你想执行代码后的基本行为 然后调用它 如果你想完全覆盖基本行为 根本不调用它 重要的是还检查您的 A
  • EF 迁移迁移到 0 调用初始创建关闭

    我正在尝试找出将迁移降低到空数据库的语法 就像在初始创建迁移中调用 down 方法一样 有谁知道在迁移中调用 Down 方法的正确语法与此类似 Update Database StartupProjectName Infrastructur
  • 使用 .NET WebClient 模拟 XmlHttpRequest

    据我所知XmlHttpRequest我只需使用以下命令即可下载和上传数据send方法 但WebClient有很多方法 我不想要一个的所有功能WebClient 我只想创建一个模拟的对象XmlHttpRequest 但它没有 XSS 限制 我
  • 在 Roslyn 分析器中检查表达式类型的正确方法?

    我正在用 Roslyn 编写一个代码分析器 我需要检查是否ExpressionSyntax属于类型Task or Task
  • Asp.net Mvc OutputCache属性和滑动过期

    Calling http foo home cachetest for UrlRoute Path home cachetest OutputCache Duration 10 VaryByParam none public ActionR
  • 使用 C# 在 Windows 窗体应用程序中正确使用 OnClick 与 MouseClick 事件

    我目前正在开发一个自定义控件 并意识到我的代码正在运行两次 这实际上并不是一个大问题 它只是 Focus 方法调用 不过 我想了解一下 从阅读点击 MSDN说明单击事件 http msdn microsoft com en us libra
  • GridView必须添加到表单标签中才能渲染

    TextWriter tr new StringWriter HtmlTextWriter writer new HtmlTextWriter tr HtmlForm form new HtmlForm form Controls Add
  • 如何在类文件中使用BackGroundWorker?

    我的program cs调用mdi父frmMain frmMain 然后根据用户操作打开不同的子表单 所有的处理逻辑都写在BusinessLogic cs中 frmMain 在加载时调用 BusinessLogic cs 的方法来初始填充数
  • 当文件已存在时无法创建该文件

    我正在使用 Winforms 并且尝试将文件从一个位置复制到另一个位置 如果同名文件已经存在 我想覆盖它 但我收到类似 当文件已存在时无法创建文件 的错误 我想覆盖该文件 我应该怎么办 我试过File copy代替File move 但我遇
  • 无法从程序集“mscorlib”加载类型“System.Runtime.CompilerServices.ExtensionAttribute”

    第一次启动我的网站时 我收到此错误 Could not load type System Runtime CompilerServices ExtensionAttribute from assembly mscorlib Version
  • 这可以用 Moq 来嘲笑吗?

    我正在努力模拟一些外部依赖项 并且在一个第三方类中遇到了麻烦 该类在其构造函数中接收另一个第三方类的实例 希望 SO 社区能给我一些指导 我想创建一个模拟实例SomeRelatedLibraryClass它的构造函数接受一个模拟实例Some
  • 在VB.net中动态添加用户控件

    我在 Vb net Windows 应用程序 中制作了自定义 UserControl 如何将其动态添加到表单中 UserControl 本质上只是另一个类 它继承自 Control 因此您可以使用控件执行各种操作 但除此之外它只是一个类 因
  • 使用 LINQ 迭代类属性

    有一个 ParsedTemplate 类 它有超过 300 个属性 类型为 Details 和 BlockDetails parsedTemplate 对象将由函数填充 填充这个对象后 我需要一个 LINQ 或其他方式 来查找是否有任何属性
  • 使用 Entity Framework Core 2.0 更改或重命名列名称而不丢失数据

    我意识到我的一个列标题拼写错误 因此我在模型中更改了它并创建了一个新的迁移以将其更新到数据库中 一切都很完美 直到我意识到实际发生的情况是一个新列取代了现有列并删除了所有数据 碰巧的是 由于这是一个教程数据库 因此恢复数据并不重要 只需几分
  • 正则表达式:如何获取组名称

    我有一个 NET 正则表达式 它看起来类似于
  • 您是否必须在 VB.NET 中显式创建表单实例? [复制]

    这个问题在这里已经有答案了 如果一个项目包含Form类 形式可以通过以下方式显示 Form1 Show 或者是否需要首先创建表单的实例 Dim frm As New Form1 frm Show 正如所建议的 使用表单名称使用默认实例 而第
  • 转义字符串中的反斜杠

    我想知道什么是转义字符串中的反斜杠而不添加不必要的斜杠的好方法 我的意思是 通常如果我想转义字符串中的反斜杠 最简单的方法是使用String Replace 像这样 string s someString Replace 可以使用正则表达式
  • 用户模式 ​​.NET 设置存储在哪里?

    我想知道 NET 中 settings 文件背后的魔力是什么 假设您创建了一个在此示例中称为的程序集SettingsHolder 您创建一个公共的设置类 其中在用户模式下有一个字符串 然后进行编译 现在 您在 MyApp 中引用您的程序集
  • 如何向WebRequest添加参数?

    我需要从 Web 服务调用一个方法 所以我编写了以下代码 private string urlPath http xxx xxx xxx manager string request urlPath index php org get or
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User

随机推荐