实体框架没有创建插入语句
本文关键字:插入 语句 创建 框架 实体 | 更新日期: 2023-09-27 18:07:13
不知您能否帮我解决一个一直困扰我的问题。我将首先从代码开始!
public class DevelopmentImageContext : Context<DevelopmentImage>
{
public List<DevelopmentImage> DevelopmentImages { get; private set; }
public DevelopmentImageContext() { }
public DevelopmentImageContext(int imageId)
{
EntityId = imageId;
}
public DevelopmentImageContext(Development development)
{
var result = (from d in Context.DevelopmentImages
where d.Development == development
select d).ToList();
DevelopmentImages = result;
}
public override DevelopmentImage GetEntity()
{
if (EntityId != 0)
{
return Context.DevelopmentImages.Where(d => d.ImageId == EntityId).FirstOrDefault();
}
throw new EntityNotFound("Entity was either null or 0");
}
public override void CreateEntity(DevelopmentImage entity)
{
Context.DevelopmentImages.AddObject(entity);
Context.SaveChanges();
}
public override void CreateEntities(List<DevelopmentImage> entities)
{
foreach (var entity in entities)
{
try
{
Context.DevelopmentImages.AddObject(entity);
CommitChanges();
}
catch (Exception exception)
{
throw new Exception("Unable to create Object", exception);
}
}
Context.SaveChanges();
}
}
有一个抽象类叫做ContextManager,它有一个属性叫做Context。如果需要的话,我可以把这个贴出来。
调用CreateEntities方法时,我遍历一个Development列表,循环遍历它们并插入到数据库中。问题是,什么也没创造出来。尝试使用EFProf来查看它是否创建了一个带有插入查询的事务。我确实在Context类中有另一个方法,称为DeleteEntities,它使用一些基本的SQL和ExecuteStoreCommand方法有效地删除数据中的所有数据。在EFProf中,我可以看到这个SQL正在执行。
知道为什么我不能创建对象吗?
谢谢,马特
编辑:我已经将属性Context重命名为contexttity,看看这是否改变了任何东西,没有:(
检查数据库连接字符串了吗?由于您首先使用的是代码,因此它可能正在创建一个新的数据库,并且一切似乎都很好。最好显式地提供连接字符串。
如果您碰巧没有配置文件,将使用默认数据库:
=数据源。' SQLEXPRESS;初始目录= MyNamespace.MyContext;整合安全= True; MultipleActiveResultSets = True
查找:
using (BlogContext context = new BlogContext())
{
string cs = context.Database.Connection.ConnectionString;
}
我觉得自己非常愚蠢。我应该张贴ContextManager类,因为有人会发现我的错误:
private static GirlingsWebEntities _entity;
public GirlingsWebEntities ContextEntity
{
get
{
if (HttpContext.Current == null)
{
return _entity ?? (_entity = new GirlingsWebEntities());
}
else
{
string sKey = "context_" + HttpContext.Current.GetHashCode().ToString("x");
if (!HttpContext.Current.Items.Contains(sKey))
{
HttpContext.Current.Items.Add(sKey, new GirlingsWebEntities());
((GirlingsWebEntities)HttpContext.Current.Items[sKey]).ContextOptions.LazyLoadingEnabled = true;
}
return (GirlingsWebEntities)HttpContext.Current.Items[sKey];
}
}
}
public void CommitChanges()
{
ContextEntity.SaveChanges();
}
}
我有返回_entity ??(_entity = new GirlingsWebEntities());我只是返回一个正常的属性,而不是一个静态属性,因此使用不同的连接到数据库,一个不存在!
希望这能帮助到其他人:)