如果唯一字段的组合已存在于具有 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 优先生成。
我目前正在尝试确保示例对象无法发布,除非它具有唯一的 SomeName
、SomeAddress
和 SomeCity
。如果数据库中已存在具有这三个字段的相同组合的记录,我将向用户显示一条错误消息。
在 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)
如果我有一个对象如下:
var example = new Example
{
SomeName = viewModel.SomeName,
SomeTitle = viewModel.SomeTitle,
SomeAddress = viewModel.SomeAddress,
SomeCity = viewModel.SomeCity
};
_class.AddObject(example);
AddObject 方法使用存储库中的添加实体方法。视图模型所基于的域已由 Entity Framework (6) DB 优先生成。
我目前正在尝试确保示例对象无法发布,除非它具有唯一的 SomeName
、SomeAddress
和 SomeCity
。如果数据库中已存在具有这三个字段的相同组合的记录,我将向用户显示一条错误消息。
在 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)