gpt4 book ai didi

c# - EntityObject 到 DbContext

转载 作者:行者123 更新时间:2023-11-30 23:27:54 25 4
gpt4 key购买 nike

我不确定这个问题的确切技术规范,但简单来说,我正在尝试创建一个包装器/扩展方法来保存我的实体。

所以我将新的实体数据模型 (.edmx) 文件添加到我的项目中。像这样生成 DbSet-

 public partial class SUContextContainer : DbContext
{
public SUContextContainer()
: base("name=SUContextContainer")
{
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}

public DbSet<Category> Categories { get; set; }
public DbSet<Gallery> Galleries { get; set; }
public DbSet<SuperUser> SuperUsers { get; set; }
public DbSet<UserType> UserTypes { get; set; }
}

现在我想把它包装成一个扩展方法,用于数据库操作,如(保存、删除、更新等)

我尝试将其创建为 -

 public static void Save(this EntityObject objEntity)
{
try // Update Record
{
((IObjectContextAdapter)Global.Context).ObjectContext.ObjectStateManager.ChangeObjectState(objEntity, EntityState.Modified);
Global.Context.SaveChanges();
}
catch (OptimisticConcurrencyException) // Insert Record
{
((IObjectContextAdapter)Global.Context).ObjectContext.ObjectStateManager.ChangeObjectState(objEntity, EntityState.Added);
Global.Context.SaveChanges();
}
}

此方法附加到 EntityObject 类型。它生成的 .edmx 代码属于 DbContext 类型。

所以每当我尝试用这个辅助方法保存一些实体时,它永远找不到。

 var galleryEntity = new Gallery {
IsActive = true,
CategoryId = model.CategoryId,
};
galleryEntity.Save(); // the save method is not found.

我试过上面的方法来改变 -

 public static void Save(this DbSet objEntity)

但这似乎也没有作为扩展方法。我做错了什么。

最佳答案

So Whenever I try to save some entity with this helper method it never finds out.

不会,因为 gallery 只是一个类,不是从 EntityObject 继承的。

我不建议添加继承或修改自动生成的类。

利用部分类的力量:

您可以使用界面为您的模型创建空间类。

public partial class Gallery : IEntity
{
//This is your class different than auto generated class by Ef.
}

此外,您不应该使用 try catch 来做决定。这就是为什么你应该将更新和创建分开,并在上层做出决定(没有 try catch)。

所以你的扩展方法应该是这样的。

public static int Update<T>(this T entity) where T : IEntity
{
using(var dbContext=new SUContextContainer())
{
var entry = dbContext.Entry(entity);
dbContext.Set<T>().Attach(entity);
entry.State = EntityState.Modified;
return dbContext.SaveChanges();
}
}

public static int Create<T>(this T entity) where T : IEntity
{
using(var dbContext=new SUContextContainer())
{
dbContext.Set<T>().Add(entity);
return dbContext.SaveChanges();
}
}

关于c# - EntityObject 到 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36266890/

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