我会尝试解释我想要的东西,但这很难。 ) 所以我有实体:
public class User
{
[Key]
public Int32 Id { get; set; }
public String Name { get; set; }
public List<Article> Article { get; set; }
public String Surname { get; set; }
}
我已实现DbContext
及其界面:
public interface IMyContext
{
DbSet<T> Set<T>() where T : class;
}
public class MyContext : DbContext, IMyContext
{
public DbSet<User> Users { get; set; }
protected override void Dispose(bool disposing)
{
this.SaveChanges();
base.Dispose(disposing);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//modelBuilder.Entity<User>().HasMany(e => e.Article).WithRequired(e => e.User).WillCascadeOnDelete(true);
base.OnModelCreating(modelBuilder);
}
}
我有这个实体存储库及其界面:
public interface IUserRepository
{
void Add(User entity);
void Delete(User entity);
User GetById(Int32 id);
List<User> GetAll();
}
public class UserRepository : RepositoryBase<User>, IUserRepository
{
[Inject]
public UserRepository(IMyContext context):base(context)
{
}
}
此外,我正在使用ninject注入依赖项。在使用中它看起来像这样(不要告诉我,我不应该直接在我的pressentation层中使用存储库,我应该通过BussinesLogic
层使用它。这只是一个例子):
var repository = DI.Resolve<IUserRepository>();
repository.Add(new User(){Name="Vasja1", Id = 1, Surname = "Petrov"});
让我们假设我们在Presteation层中有Asp.NET应用程序。我的应用程序可以在很多地方修改实体。我应该使用SaveChanges()
的问题?我把它放在context.Dispose()
方法中,但也必须调用dispose。谢谢答案。如果你要展示这个例子,我将非常感激。
答案 0 :(得分:1)
如果遵循MVC模式,您可以将存储库调用包含在控制器操作中的using语句中。 using块中的最后一行可能是.SaveChanges()。您还可以搜索交易/工作单元模式。
答案 1 :(得分:1)
我不认为处理中的保存更改是一个好主意。
您可以在存储库类上实现SaveChnages,但是您经常会看到使用的逻辑工作单元模式。以下是对这种模式的简要说明。
public interface ILuw
OperationStatus Commit();
public class UoW : IUow
{
// Constructor... inject context....
// Properties/Members that work with your repository Interface pattern
public DbSet<Users> Users // example
public DbSet<Entity2>
public OperationStatus Commit()
{
Context.SaveChanges();
}
}
所以现在你甚至可以注入工作单元类/接口。 它又包含遵循接口模式的存储库。
Luw实例化了一个上下文。您将通过注射进行,但为了演示
var myLuw = new Luw(MyContext);
myLuw.RepositoryPatternofEntityT.Get // or add, remove etc.
// otehr rpository changes
myLuw.Commit
Luw类可以实现Idisposable。但是不要把Save in dispose。 调用提交时应该提交更改集。
然后您可以处置Luw或再次使用它......另一个讨论