- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定这个问题的确切技术规范,但简单来说,我正在尝试创建一个包装器/扩展方法来保存我的实体。
所以我将新的实体数据模型 (.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/
我想对我的 ObjectContext 执行删除操作。 这是我的代码: var tempList = someEntityObject.SomeCollectionOfEntityObject; fo
我刚得到一个要使用的 DLL 库,其中记录了以下类: 类定义: [SerializableAttribute] [EdmEntityTypeAttribute(NamespaceName = "Cus
我不确定这个问题的确切技术规范,但简单来说,我正在尝试创建一个包装器/扩展方法来保存我的实体。 所以我将新的实体数据模型 (.edmx) 文件添加到我的项目中。像这样生成 DbSet- public
我在我的应用程序中使用 EntityFramework、WPF 和 MVVM,并且在更新 EntityObjects 之间关系的数据绑定(bind)时遇到了一些问题。我能够将我的问题缩小到只有几行 X
我是 Entity Framework 的新手(我使用的是 EF5),我正在从事一个测试项目以了解一些相关知识。 现在我正在实现一些 DAO 类来访问 this tutorial 之后的数据库(有点老
我们的数据库中有一个审计表,在更新时,旧值和新值被序列化为 XML 并存储在同一行中。这些对象目前是深度克隆的: public EntityObject CloneEntity(EntityObjec
我正在使用 .Net Connector 6.3.6 处理 MySQL,并在 VS 2010 上创建实体模型。我打算编写一个通用方法,将 EntityObject 添加到其对应的表中。这是它的样子:
众所周知,如果我们有一个 EntityObject,则无法找到它所属的 ObjectContext。我想这很公平,但为什么我们可以延迟加载对象呢?延迟加载的过程肯定必须访问 ObjectContext
我想阅读 EntityObject 中的更改以纳入报告。 例如: Name: Before After Location: Before After 有没有通用的方法来做到这一点?我将 EF4 与默认
我正在使用 Entity Framework 5 构建我的第一个 MVC 4/Razor 网络应用程序,并在做出任何设计决定之前做了一些功课。 我看到 EF 对象来自 EntityObject ,它似
我的 Entity Framework 模型是从 SQL Server 数据库生成的。由于我需要从 Silverlight 访问数据库,因此我针对 EF 模型为 RIAServices 生成了一个 D
我有一个从 Entity Framework 对象生成的 XML 文档。生成的 XML 如下所示: 转发完整的 XML Editorial_MasterEntities
我们正在尝试转换 IQueryable 的实例到 IQueryable , SpecificEntityObject类型仅在运行时已知。 我们已尝试使用下面的代码,该代码无法编译,因为类型或命名空间
我正在尝试缩短长代码。原始代码执行以下操作: using (var context = new DataEntities()) { context.Table1.Foreach(x =>{ /
我一直在查看许多使用 EntityFramework 的 WCF 示例,其中大多数似乎将某种 POCO 或 DTO 类返回给客户端。 我想知道为什么这是因为默认 EntityObject包括 [Dat
我已经在 VS2015 中安装了最新的 Entity Framework 版本 (EntityFramework.6.1.3)。我在项目中添加了 EF 并删除了 2 个 .tt 文件(edmx_fil
假设我在数据库中有一行我知道一个特定的 id(在我下面的示例中 - 一个 Id = 5 的符号),我可以创建一个 EntityObject 可以附加到另一个实体而无需加载它来自数据库(同样的场景也适用
是否有一种简单的方法来比较两个 EntityObjects 的值相等。 我只是想检查所有数据库值是否相同,所以我不在乎 EntityKey 是否不同。 这可能是内置的吗?或者我应该写我自己的方法。 我
我正在为我的模型层使用 Entity Framework ,我想连接一个 PropertyChanged 事件,该事件根据属性的 OldValue 和 NewValue 更改另一个属性。有没有我可以为
除了更快的开发时间(据我所知,Visual Studio 2010 beta 2 没有用于构建 POCO 实体对象的 T4 模板),默认情况下,使用 Entity Framework 创建的传统 En
我是一名优秀的程序员,十分优秀!