I'm start to learn EF now. What I want to do is use EF code first create new tables in SQL Azure.
Here is my code:
namespace WebApplication2
{
public class Blog
{
public int UserName { get; set; }
public int ID { get; set; }
}
public class BlogContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public BlogContext() : base("MYEF")
{
}
}
}
Code behind:
protected void Page_Load(object sender, EventArgs e)
{
using (var db = new BlogContext())
{
var blog = new Blog { UserName = 456 };
db.Blogs.Add(blog);
db.SaveChanges();
}
}
Web.config
:
<connectionStrings>
<add name="TestDBContext"
connectionString="Server=tcp:mydb.database.windows.net,1433;Database=MYEF;User ID=[Username];Password=[MyPassword];Trusted_Connection=False;Encrypt=True;PersistSecurityInfo=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
When I check my SQL Azure DB, no table has been created, EF still create the table MYEF
in the default SQL Server Express database.
Has anyone done this successfully?
You should pass the connection string name to the base constructor of your BlogContext
like this
public BlogContext()
: base("TestDBContext")
{
}
http://msdn.microsoft.com/en-us/library/gg679467(v=vs.103).aspx
EntityFramework tries to infer the name of the ConnectionString in the web/app.config file from the name of the class which inherits DbContext. In your case, this is BlogContext.
If you simply changed
<connectionStrings><add name="TestDBContext"
to
<connectionStrings><add name="BlogContext"
then you could do public BlogContext()
without passing a hard string to the base class.