entity framwork 链接字符串不保存在config文件方法

Entity Framework で、 C# コード内から、接続文字列や接続プロバイダを指定する方法。


まぁ app.config に connectionStrings を定義せずに接続するみたいな感じ。


Entity Framework の使い方みたいなサイトを見ると、たいてい Code First でやってたり、
app.config に接続先を指定しているみたいなのが多いけど、
コードから接続先やプロバイダを指定する方法を使うことになったので、メモ。


対象


Entity Framework 6.1.3
System.Data.SQLite.EF6 1.0.98.1




通常は下のような感じでする(はず)。


PersonContext.cs


using System.Data.Entity;


using Experiment.ConsoleApp.Models;


namespace Experiment.ConsoleApp
{
    public class PersonContext : DbContext
    {
        public PersonContext() : base("PersonContext")
        {
        }


        public DbSet<Person> People { get; set; }
    }
}




App.config


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  ...(省略)...
  <connectionStrings>
    <add name="PersonContext" connectionString="Data Source=./app.db;" providerName="System.Data.SQLite" />
  </connectionStrings>
</configuration>
そうすれば、接続していい感じにしてくれる。






次は、コード内でやる方法。
上のコードを改変する感じで。


PersonContext.cs


using System.Data.Common;
using System.Data.Entity;


using Experiment.ConsoleApp.Models;


namespace Experiment.ConsoleApp
{
    public class PersonContext : DbContext
    {
        public PersonContext(DbConnection connection) : base(connection, true)
        {
        }


        public DbSet<Person> People { get; set; }
    }
}
Program.cs


using System;
using System.Data.Common;


namespace Experiment.ConsoleApp
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var connection = DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection();
            connection.ConnectionString = "Data Source=./app.db";


            using (var context = new PersonContext(connection))
            {
                foreach (var person in context.People)
                {
                    Console.WriteLine($"{person.FirstName} {person.LastName} ({person.Age})");
                }
            }


            Console.ReadLine();
        }
    }
}
こうすれば、app.config に connectionStrings を設定しなくても接続できる。
やり方的には、新しく PersonContext で接続を作るのではなくて、すでにある接続を使う感じ。


MSDNにかいてあった。


DbContext コンストラクター (DbConnection, Boolean) (System.Data.Entity)


ということで、メモでした。


ついでだけど、 Entity Framework は Person クラスの場合は People テーブルを見に行くらしい。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在.NET Framework 4.0上使用Entity Framework连接mysql数据库需要使用MySQL Connector/NET提供的MySQL.Data.EntityFramework组件。以下是具体步骤: 1. 下载并安装MySQL Connector/NET。 2. 在Visual Studio创建一个新项目。 3. 在项目添加对MySQL.Data.EntityFramework的引用。 4. 在App.config或Web.config文件添加以下配置节: ```xml <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <connectionStrings> <add name="MyDbContext" connectionString="server=localhost;user id=root;password=my_password;database=my_database" providerName="MySql.Data.MySqlClient" /> </connectionStrings> <entityFramework> <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF4" /> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF4" /> </providers> </entityFramework> </configuration> ``` 其,MyDbContext是你的DbContext的名称,connectionString是你的mysql连接字符串,invariantName是mysql的提供程序名称。 5. 创建一个DbContext类,继承自System.Data.Entity.DbContext,并添加以下代码: ```csharp using System.Data.Entity; using MySql.Data.EntityFramework; [DbConfigurationType(typeof(MySqlEFConfiguration))] public class MyDbContext : DbContext { public MyDbContext() : base("MyDbContext") { } public DbSet<MyEntity> MyEntities { get; set; } } ``` 其,MyEntity是你的实体类。 6. 在程序使用DbContext进行数据访问。 ```csharp using (var db = new MyDbContext()) { var myEntity = new MyEntity { Name = "Test" }; db.MyEntities.Add(myEntity); db.SaveChanges(); } ``` 以上就是在.NET Framework 4.0上使用Entity Framework连接mysql数据库的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值