gpt4 book ai didi

c# - Entity Framework : writing a common method to check exist

转载 作者:太空宇宙 更新时间:2023-11-03 21:29:00 24 4
gpt4 key购买 nike

我的领域类:

public class Address
{
[Key]
public virtual string AddressId { get; set; }
public virtual string Address { get; set; }
}

在我的 MVC Controller 中,我想在插入之前检查给定的地址是否存在。

public ActionResult Create(Address address)
{
if (ModelState.IsValid)
{
if (db.Addresses.Any(a => a.AddressId == address.AddressId)) // how I do it now
{
ModelState.AddModelError(string.Empty, "Address Id already exists!");
}
else
{
db.Addresses.Add(address);
db.SaveChanges();
return RedirectToAction("Index");
}
}
}

但我的项目中还有很多其他域类,我想一次又一次地进行相同的检查。

我的问题是我想在我的 Db 上下文 类中编写一个通用方法来执行此检查。 (看起来像下面或类似的)

public bool Exists(object) {
// return true if exist
}

即我可以这样调用的方法:

db.Exists(address)

谢谢!

最佳答案

您可以使用泛型并执行如下操作:

public class YourDbContext : DbContext
{
...

public bool Exists<TEntity>(object id)
where TEntity : class
{
var dbSet = Set<TEntity>();
var entity = dbSet.Find(id);
return entity != null;
}

然后你会像这样使用它:

db.Exists<Address>(address.AddressId);

使用 Find 并不是处理此问题的有效方法,它具有您不需要的关键优势知道类的实际主键属性是什么,这会使该方法非常复杂。例如,AddressAddressId,但 Foo 可能有 FooId

更新

由于最终这只是在幕后使用了 Find,因此您只需稍微修改该方法即可获取多个参数。 Find 通过允许再传递一个参数来处理组合键。但请记住,顺序很重要,必须与您在配置实体时指定的键顺序一致。

public bool Exists<TEntity>(params object[] keys)
where TEntity : class
{
var dbSet = Set<TEntity>();
var entity = dbSet.Find(keys);
return entity != null;
}

关于c# - Entity Framework : writing a common method to check exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25219436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com