gpt4 book ai didi

.net - Entity Framework 中的通用持久化方法 - 插入或更新(如果存在)实体

转载 作者:行者123 更新时间:2023-12-04 18:11:33 26 4
gpt4 key购买 nike

Entity Framework 中实现通用持久方法的最佳解决方案是什么?

例如有一个公司实体:

public class Company
{
public Company()
{
Id = Guid.NewGuid();
}

public Guid Id { get; set; }

public string Name { get; set; }
}

Id 属性可以在实体存储到数据库之前生成。

所以任务是实现 Persist 方法:
public class Repository
{
private DbSet<Company> _dbSet;

public void Persist(Company company)
{
// How to implement body here to Add entity if it doesn't exists yet
// or Modify it in opposit case?
// In terms of database entity record is required to be inserted or updated.
}
}

谢谢!

最佳答案

在您无法识别 Company 的示例中实例是新的或以前从数据库中加载过,您必须查询数据库:

public void Persist(Company company)
{
var companyInDb = _dbSet.SingleOrDefault(c => c.Id == company.Id);
if (companyInDb != null)
{
_context.Entry(companyInDb).CurrentValues.SetValues(company);
}
else
{
_dbSet.Add(company);
}
_context.SaveChanges();
}

如您所见,您需要引用上下文 _context在您的存储库中。

如果您将公司标记为新公司或从数据库加载,则可以使用另一种方法,例如使用特殊的构造函数:
public class Company
{
public Company()
{
}

public Company(bool isNew)
{
Id = Guid.NewGuid();
_isNew = isNew;
}

public Guid Id { get; set; }
public string Name { get; set; }

private bool _isNew;
public IsNew { get { return _isNew; } }
}
Persist方法就不需要加载原件:
public void Persist(Company company)
{
if (!company.IsNew)
{
_context.Entry(company).State = EntityState.Modified;
}
else
{
_dbSet.Add(company);
}
_context.SaveChanges();
}

请注意,所有这些仅更新公司的标量属性,而不是关系。

关于.net - Entity Framework 中的通用持久化方法 - 插入或更新(如果存在)实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12543770/

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