سلام.
برای اتصال به دیتابیس شما باید یک کلاس ایجاد کرده که از DbContext ارث بری کند و همچنین اینترفیس IDbContext را نیز پیاده سازی کند. بطور مثال
public class MyDataContext : DbContext, IDbContext
{
public MyDataContext(string nameOrConnectionString) : base(nameOrConnectionString)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<MyDataContext>(null);
base.OnModelCreating(modelBuilder);
}
public string CreateDatabaseInstallationScript()
{
return ((IObjectContextAdapter)this).ObjectContext.CreateDatabaseScript();
}
public void Install()
{
var dbScript = CreateDatabaseInstallationScript();
Database.ExecuteSqlCommand(dbScript);
SaveChanges();
}
public void UnInstall()
{
//drop the table
//this.DropPluginTable(this.GetTableName<CustomCategory>());
//this.DropPluginTable(this.GetTableName<CustomSet>());
}
#region IDbContext
IDbSet<TEntity> IDbContext.Set<TEntity>()
{
return base.Set<TEntity>();
}
public bool AutoDetectChangesEnabled
{
get => this.Configuration.AutoDetectChangesEnabled;
set => this.Configuration.AutoDetectChangesEnabled = value;
}
public bool ProxyCreationEnabled
{
get => this.Configuration.ProxyCreationEnabled;
set => this.Configuration.ProxyCreationEnabled = value;
}
public void Detach(object entity)
{
if (entity == null)
throw new ArgumentNullException(nameof(entity));
((IObjectContextAdapter)this).ObjectContext.Detach(entity);
}
public int ExecuteSqlCommand(string sql, bool doNotEnsureTransaction = false, int? timeout = default(int?), params object[] parameters)
{
throw new NotImplementedException();
}
public IList<TEntity> ExecuteStoredProcedureList<TEntity>(string commandText, params object[] parameters) where TEntity : BaseEntity, new()
{
throw new NotImplementedException();
}
public IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters)
{
throw new NotImplementedException();
}
#endregion IDbContext
}
در قسمت OnModelCreating شما میتوانید mapping های خود را نسبت به جداول دیتابس اعمال نمایید.
بطور مثال:
public partial class MyTableMap : NopEntityTypeConfiguration<MyTable>
{
public MyTableMap ()
{
this.ToTable("MyTable");
this.HasKey(x => x.Id);
this.Property(x => x.Name).HasMaxLength(200);
}
}
حالا mapping رو در OnModelCreating ثبت کنید:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new MyTableMap());
}
مورد دیگه اینکه شما باید یک کلاس دیگر داشته باشید که رابط IDependencyRegistrar را پیاده سازی میکند.و سپس کلاس MyDbContext خود را در آن رجیستر میکنید.همانند زیر:
public class DependencyRegistrar : IDependencyRegistrar
{
public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder, NopConfig config)
{
this.RegisterPluginDataContext<MyDataContext>(builder, "nop_object_context_Demo");
}
public int Order
{
get { return 0; }
}
}