asp.net core +EF+MySql(code first fluentapi)

CelinaLQ 2018-03-07 09:19:49
如题
asp.net core +EF+MySql(code first fluentapi)


大概架构这样
然后我创建了通用的泛型类
在studentservice中
{
public int AddNew(string Name, int Age)
{
using (MyDbcontext ctx = new MyDbcontext())
{
BaseService<Student> stu = new BaseService<Student>(ctx);
Student s = new Student();

s.Name = Name;
s.Age = Age;

ctx.Student.Add(s);
return ctx.SaveChanges();
}
}
}

会报错

如果在Mydbcontext 的类中加一个空的构造函数,
报错会消失,但是在插入数据时候
报错信息:System.InvalidOperationException:“No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.”

...全文
576 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mylcom 2018-03-29
  • 打赏
  • 举报
回复
看你具体的MyDbcontext 一般来说。需要 public MyDbcontext() : base("name=MyDbcontext") { } 通过base来默认寻找配置文件中MyDbcontext的连接字符串和数据库驱动。
圣殿骑士18 2018-03-07
  • 打赏
  • 举报
回复

public partial class leadmw2_efContext : DbContext
    {
        static leadmw2_efContext()
        {
            Database.SetInitializer<leadmw2_efContext>(null);
        }

        public leadmw2_efContext()
            : base("Name=leadmw2_efContext")
        {
        }

        public DbSet<MW_Actor> MW_Actor { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new MW_ActorMap());
        }
    }
键盘敲出字 2018-03-07
  • 打赏
  • 举报
回复
讲道理服务类不是应该继承MyDbcontext吗?
public class studentservice:MyDbcontext{
}
CelinaLQ 2018-03-07
  • 打赏
  • 举报
回复
引用 5 楼 hanjun0612 的回复:
[quote=引用 4 楼 qq_34745652 的回复:] [quote=引用 3 楼 hanjun0612 的回复:] [quote=引用 2 楼 qq_34745652 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 看你具体的MyDbcontext 一般来说。需要 public MyDbcontext() : base("name=MyDbcontext") { } 通过base来默认寻找配置文件中MyDbcontext的连接字符串和数据库驱动。
那应该怎么写?这样是不是不对??[/quote] 要看你的 mydbcontext才知道。[/quote]

 public class MyDbcontext : DbContext
    {


        public MyDbcontext(DbContextOptions<MyDbcontext> options) : base(options)
        {
        }

        public DbSet<Student> Student { get; set; }

        public DbSet<Teacher> Teacher { get; set; }

        public DbSet<Class> Class { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //IConfiguration
            //base.OnModelCreating(modelBuilder);
            //modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());

            var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
               .Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);

            foreach (var type in typesToRegister)
            {

                dynamic configurationInstance = Activator.CreateInstance(type);
                modelBuilder.ApplyConfiguration(configurationInstance);
            }
        }

麻烦了
[/quote] 2个方法 1 你调用 MyDbcontext 的有参构造方法 2 你按照我上面给你的代码,自己实现MyDbcontext无参构造函数,通过base指定默认调用父类的有参构造函数[/quote] 大神你好,应该怎么改造呢?
CelinaLQ 2018-03-07
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
[quote=引用 2 楼 qq_34745652 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 看你具体的MyDbcontext 一般来说。需要 public MyDbcontext() : base("name=MyDbcontext") { } 通过base来默认寻找配置文件中MyDbcontext的连接字符串和数据库驱动。
那应该怎么写?这样是不是不对??[/quote] 要看你的 mydbcontext才知道。[/quote]

 public class MyDbcontext : DbContext
    {


        public MyDbcontext(DbContextOptions<MyDbcontext> options) : base(options)
        {
        }

        public DbSet<Student> Student { get; set; }

        public DbSet<Teacher> Teacher { get; set; }

        public DbSet<Class> Class { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //IConfiguration
            //base.OnModelCreating(modelBuilder);
            //modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());

            var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
               .Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);

            foreach (var type in typesToRegister)
            {

                dynamic configurationInstance = Activator.CreateInstance(type);
                modelBuilder.ApplyConfiguration(configurationInstance);
            }
        }

麻烦了
正怒月神 2018-03-07
  • 打赏
  • 举报
回复
引用 4 楼 qq_34745652 的回复:
[quote=引用 3 楼 hanjun0612 的回复:] [quote=引用 2 楼 qq_34745652 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 看你具体的MyDbcontext 一般来说。需要 public MyDbcontext() : base("name=MyDbcontext") { } 通过base来默认寻找配置文件中MyDbcontext的连接字符串和数据库驱动。
那应该怎么写?这样是不是不对??[/quote] 要看你的 mydbcontext才知道。[/quote]

 public class MyDbcontext : DbContext
    {


        public MyDbcontext(DbContextOptions<MyDbcontext> options) : base(options)
        {
        }

        public DbSet<Student> Student { get; set; }

        public DbSet<Teacher> Teacher { get; set; }

        public DbSet<Class> Class { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //IConfiguration
            //base.OnModelCreating(modelBuilder);
            //modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());

            var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
               .Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);

            foreach (var type in typesToRegister)
            {

                dynamic configurationInstance = Activator.CreateInstance(type);
                modelBuilder.ApplyConfiguration(configurationInstance);
            }
        }

麻烦了
[/quote] 2个方法 1 你调用 MyDbcontext 的有参构造方法 2 你按照我上面给你的代码,自己实现MyDbcontext无参构造函数,通过base指定默认调用父类的有参构造函数
CelinaLQ 2018-03-07
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
看你具体的MyDbcontext 一般来说。需要 public MyDbcontext() : base("name=MyDbcontext") { } 通过base来默认寻找配置文件中MyDbcontext的连接字符串和数据库驱动。
那应该怎么写?这样是不是不对??
正怒月神 2018-03-07
  • 打赏
  • 举报
回复
引用 2 楼 qq_34745652 的回复:
[quote=引用 1 楼 hanjun0612 的回复:] 看你具体的MyDbcontext 一般来说。需要 public MyDbcontext() : base("name=MyDbcontext") { } 通过base来默认寻找配置文件中MyDbcontext的连接字符串和数据库驱动。
那应该怎么写?这样是不是不对??[/quote] 要看你的 mydbcontext才知道。
正怒月神 2018-03-07
  • 打赏
  • 举报
回复
看你具体的MyDbcontext 一般来说。需要 public MyDbcontext() : base("name=MyDbcontext") { } 通过base来默认寻找配置文件中MyDbcontext的连接字符串和数据库驱动。
CelinaLQ 2018-03-07
  • 打赏
  • 举报
回复
引用 7 楼 a755362405 的回复:
讲道理服务类不是应该继承MyDbcontext吗?
public class studentservice:MyDbcontext{
}
没弄出来,才发帖问问大神门
CelinaLQ 2018-03-07
  • 打赏
  • 举报
回复
引用 7 楼 a755362405 的回复:
讲道理服务类不是应该继承MyDbcontext吗?
public class studentservice:MyDbcontext{
}
引用 8 楼 daixf_csdn 的回复:

public partial class leadmw2_efContext : DbContext
    {
        static leadmw2_efContext()
        {
            Database.SetInitializer<leadmw2_efContext>(null);
        }

        public leadmw2_efContext()
            : base("Name=leadmw2_efContext")
        {
        }

        public DbSet<MW_Actor> MW_Actor { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new MW_ActorMap());
        }
    }
引用 8 楼 daixf_csdn 的回复:

public partial class leadmw2_efContext : DbContext
    {
        static leadmw2_efContext()
        {
            Database.SetInitializer<leadmw2_efContext>(null);
        }

        public leadmw2_efContext()
            : base("Name=leadmw2_efContext")
        {
        }

        public DbSet<MW_Actor> MW_Actor { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new MW_ActorMap());
        }
    }
引用 8 楼 daixf_csdn 的回复:

public partial class leadmw2_efContext : DbContext
    {
        static leadmw2_efContext()
        {
            Database.SetInitializer<leadmw2_efContext>(null);
        }

        public leadmw2_efContext()
            : base("Name=leadmw2_efContext")
        {
        }

        public DbSet<MW_Actor> MW_Actor { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new MW_ActorMap());
        }
    }
您好 .net core 中的code first fluentapi

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧