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.”

...全文
589 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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

111,098

社区成员

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

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

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