如果唯一字段的组合已存在于具有 Entity Framework 的记录中,则阻止发布对象(DB First)(ASP.NET MVC)

Prevent posting of object if combination of unique fields already exist in a record with Entity Framework (DB First) (ASP.NET MVC)

如果我有一个对象如下:

var example = new Example
{
    SomeName = viewModel.SomeName,
    SomeTitle = viewModel.SomeTitle,
    SomeAddress = viewModel.SomeAddress,
    SomeCity = viewModel.SomeCity
};

_class.AddObject(example);

AddObject 方法使用存储库中的添加实体方法。视图模型所基于的域已由 Entity Framework (6) DB 优先生成。

我目前正在尝试确保示例对象无法发布,除非它具有唯一的 SomeNameSomeAddressSomeCity。如果数据库中已存在具有这三个字段的相同组合的记录,我将向用户显示一条错误消息。

在 Entity Framework 中是否有内置的方法来执行此操作?由于领域模型是自动生成的,我知道我不能在那里注释属性。我不确定在视图模型中是否有我可以做的事情,或者最好写一些自定义逻辑。

感谢您的帮助!

在插入新记录之前,您可以使用 LINQ 检查数据库中是否已存在寄存器。

为了使事情变得更简单并且不要在内存中加载任何不需要的东西,您可以使用 Any() 方法和 lambda 表达式来查询数据库。如果找到具有所提供过滤器的任何记录,此方法将 return true 否则 false

bool recordExists = _myContext.MyTable.Any(x => x.SomeName == viewModel.SomeName && 
                                                x.SomeAddress == viewModel.SomeAddress && 
                                                x.SomeCity == viewModel.SomeCity)