我的控制器上有标准的Create()Edit()和Delete()方法,我正在使用EF4自跟踪实体.
当回发编辑时,model.ChangeTracker.ChangeTracking = false,以及model.ChangeTracker.State = ObjectState.Added,即使我确保在最初检索记录时设置了这些.
提交表单时,自我跟踪实体是否未持久保存ChangeTracker类?如果是这样,我该如何解决?
public virtual ActionResult Edit(int personId)
{
IContext context = ContextFactory.GetContext();
EntityRepo Repo = new EntityRepo(context);
Person d = Repo.Person.GetById(PersonId);
d.ChangeTracker.ChangeTrackingEnabled = true;
return View(d);
}
[HttpPost]
public virtual ActionResult Edit(int personId, Person item)
{
try
{
if (ModelState.IsValid)
{
IContext context = ContextFactory.GetContext();
EntityRepo Repo = new EntityRepo(context);
// the item is returning these properties that are wrong
//item.ChangeTracker.ChangeTrackingEnabled = false;
//item.ChangeTracker.State = ObjectState.Added;
Repo.Person.Update(item);
Repo.Person.SaveChanges();
return RedirectToAction("Index");
}
}
catch
{
} …Run Code Online (Sandbox Code Playgroud) EF4上有几本书.CTP3和CTP4之间存在很大差异.
CTP4在7月问世,所以:
已经过时了?
唯一真正的替代方案是:
但是这个覆盖CTP4吗?
我想知道是否有人可以帮助我?
我在理解为什么需要在我的POCO(非代理)实体上发出DetectChanges时遇到问题.
当然我有这一行来确保不返回代理.
context.ObjectStateManager.GetObjectStateEntry(order).State
Run Code Online (Sandbox Code Playgroud)
如果我需要检查一个对象的"状态"然后我需要发出一个checkchChanges但是为什么我需要检查一个对象的状态?
基本上我将我的POCO实体发送到一个方法,该方法将数据保存到新的ObjectContext(我在每个方法上创建并销毁ObjectContext)
因此,我在理解为什么需要使用ObjectContext跟踪或了解更改时遇到问题?
是因为如果不知道是否会被保存?
也许我很想知道,但似乎如果我使用现有的ObjectContext(我不是每次创建和销毁),确保ObjectContext知道将是有益的,否则不会?
因此,在1方法中,我通过创建新的datacontext来更新对象,将其保存到db并销毁ObjectContext.因此我不使用2种方法,1种方法发送更新或新记录,然后使用另一种方法进行保存.
我真的很感激为什么需要它的快速解释?
提前致谢
我有一个表AccountSecurity,这是一个多对多的表,涉及帐户实体和证券.当我在下面写下查询时,它会返回满足where子句的所有证券.但是,列表中的每个安全实例都不再引用它来自的AccountSecurity.所以当我列出[0] .AccountSecurity时它是空的.反正有没有包含这些信息?我知道我可以重写查询以返回AccountSecurities并使用.Include("Security"),但我想知道它是否可以用另一种方式完成.
var list = (from acctSec in base.context.AccountSecurities
where acctSec.AccountId == accountId
select acctSec.Security).ToList();
Run Code Online (Sandbox Code Playgroud)
UPDATE
当然,如果我进行两次查询,图表会正确填充,必须有一种方法可以一次完成.
var securities = (from acctSec in base.context.AccountSecurities
where acctSec.AccountId == accountId
select acctSec.Security).ToList();
//this query populates the AccountSecurities references within Security instances returned by query above
var xref = (from acctSec in base.context.AccountSecurities
where acctSec.AccountId == accountId
select acctSec).ToList();
Run Code Online (Sandbox Code Playgroud) LINQ-to-SQL有几种方法,包括可视化器加载项,用于从IQueryable查看生成的SQL.
我找不到Entity Framework 4的等价物.在StackOverflow上没有任何内容,没有博客.怎么做?
我希望能够在代码中完成它,而不必实际执行查询只是为了查看它.
谢谢!
我需要创建一个类似于审计日志的审计日志,其中一个表的大多数字段在修改时都会复制到另一个表中.通常,我会创建一个SQL触发器来执行此操作.
是否有实体框架4等效,在修改实体XI时可以修改实体Y?
我想在我的数据库中插入多个对象.
foreach (employee employeedata in employeelist)
{ objectcontext.employees.AddObject(employeedata); } objectcontext.SaveChanges();
我在循环外调用objectcontext.savechanges以使其有效.问题是我想获得db生成的主键列表.
如果我使用objectcontext.employees.AddObject(employeeA)我插入单个对象,我可以在保存更改后获取id employeeA.id.我现在不知道如何解决这个问题,因为我在对象上下文中添加了一个对象列表,然后调用了将这些对象插入到db中的savechanges.我错过了一些明显的东西吗?谢谢,
c# linq entity-framework ado.net-entity-data-model entity-framework-4
这必须很简单,但是我已经搜索了2个小时,却找不到答案。我该如何在Linq to Entities中编写此代码:
SELECT Reg4, Reg5, Reg6
FROM dbo.Table1
WHERE Reg1 = 15
AND Reg2 = ( SELECT MAX(Reg2) FROM dbo.Table2 WHERE Reg1 = 15);
Run Code Online (Sandbox Code Playgroud)
在查询表达式和基于方法的语法中都可以做到吗?
ks
我有一个与此类似的实体框架模型:
我可以添加,查询(使用OfType)和更新员工和联系人没有问题.但是,我无法确定Person对象的类型.比如说:
var person = entities.People.Single(p => p.Id == 5);
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点:
if (person.IsEmployee){
//do something
} else if (person.IsContact) {
// do something else
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以满足于此:
if (person.IsOfType<Employee>()){
// do something
} else if (person.IsOfType<Contact>()) {
// do something else
}
Run Code Online (Sandbox Code Playgroud)
有办法吗?
让我们假设以下代码处理DataContext的SaveChanges事件
void Context_SavingChanges(object sender, EventArgs e)
{
IEnumerable<ObjectStateEntry> objectStateEntries =
from ose in this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted)
where ose.Entity != null
select ose;
foreach (ObjectStateEntry entry in objectStateEntries)
{
foreach (var field in entry.CurrentValues.DataRecordInfo.FieldMetadata)
{
var guid = Guid.NewGuid();
AuditEntry audit = AuditEntry.CreateAuditEntry(
id: guid,
entitySet: entry.EntitySet.Name,
typeName: entry.Entity.GetType().Name,
entityId: (entry.CurrentValues["Id"] as string) ?? ((entry.State == EntityState.Added) ? "New" : null),
oldValue: (entry.State != EntityState.Added) ? entry.OriginalValues[field.FieldType.Name].ToString() : "New",
newValue: (entry.State != EntityState.Deleted) ? entry.CurrentValues[field.FieldType.Name].ToString() : "Deleted",
modifier: Environment.UserDomainName …Run Code Online (Sandbox Code Playgroud)