je pensais que je pouvais utiliser mon DbContext avec un DomainService la même façon que je l'utilise avec une application MVC:Code EF4 seulement + Ria services
public class DatabaseContext : DbContext
{
public DbSet<User> Users { get; set; }
}
public class UserDomainService : DomainService
{
private DatabaseContext db;
public UserDomainService()
{
db = new DatabaseContext();
}
public IQueryable<User> GetUsers()
{
return db.Users;
}
public void UpdateUser(User user)
{
db.Users.Attach(user);
}
public void DeleteUser(User user)
{
db.Users.Remove(user);
}
}
chose est que, tandis que le fonctionnement des requêtes, la suppression et Les opérations de mise à jour génèrent des exceptions telles que:
"L'objet ne peut pas être supprimé car il n'a pas été trouvé dans ObjectStateManager."
mise à jour: Solution
Alors ce que je finis par faire. Toujours pas sûr si cela est la bonne façon de le faire:
public class DatabaseContext : DbContext
{
public DbSet<User> Users { get; set; }
public new Context ObjectContext { get { return base.ObjectContext; } }
}
public class UserDomainService : DomainService
{
private DatabaseContext db;
public UserDomainService()
{
db = new DatabaseContext();
}
public override bool Submit(ChangeSet changeSet)
{
bool submitResult = false;
try
{
submitResult = base.Submit(changeSet);
db.SaveChanges();
}
catch
{
}
return submitResult;
}
public IQueryable<User> GetUsers()
{
return db.Users;
}
public void UpdateUser(User user)
{
db.Users.Attach(user);
var stateEntry = db.Context.ObjectStateManager
.GetObjectStateEntry(entity);
foreach (var propertyName in stateEntry.CurrentValues
.DataRecordInfo.FieldMetadata
.Select(fm => fm.FieldType.Name))
{
stateEntry.SetModifiedProperty(propertyName);
}
}
public void DeleteUser(User user)
{
db.Users.Attach(user);
db.Users.Remove(user);
}
}
Problème est mon utilisateur est une classe POCO pas un EntityObject, donc il ne connaît pas EntityState. –
Dans le cas d'entités POCO, il existe plusieurs approches. Dans un premier temps, jetez un oeil à ce post http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/15d54768-026a-4f86-b6e5-f40d39d9ef03 - ici un membre MSFT décrit une solution. Un lien plus utile: http://msdn.microsoft.com/en-us/library/dd456854.aspx - il est décrit comment détecter les changements dans les entités POCO là. – Devart