C# DBContext类ASP.NETMVC

C# DBContext类ASP.NETMVC,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我想知道Entity framework如何根据以下代码知道要连接到哪个表: public class Movie { public int ID { get; set; } public string Title { get; set; } public DateTime ReleaseDate { get; set; } public string Genre { get; set; } publ

我想知道Entity framework如何根据以下代码知道要连接到哪个表:

    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }

    public class MovieDBContext : DbContext
    {
        public DbSet<Movie> Movies { get; set; }
    }
现在,MovieDBContext类有一个
Movies
属性。我可以在不破坏任何东西的情况下更改它的名称吗,或者框架可以使用这个名称来知道要查询哪个表


如果我没有将上面的代码添加到
Web.config
文件会怎么样?它会根据属性的名称自动创建Movies.mdf表吗?

如果使用代码优先的方法,则可以更改Movies属性的名称。实体框架使用类名(在本例中为
类电影
)来计算表名

默认情况下,它使用以下约定:使用类名的复数形式,并尝试在数据库中查找此类表


关于数据库名称:即使没有连接字符串,EF也会尝试创建一个数据库,但它会给它一个不同的名称(例如,
WebApplication1.MovieDBContext
)。

如果您的数据库已经使用EF创建,则可能会出现错误。因此,请尝试将新命名的类显式映射到表。

EF连接到数据库,而不是表。在名为“Movies”的数据库中,您将有一个名为Movie的表,因为您有一个用于该表的DbSet。如果愿意,可以更改名称,但这是惯例。表名应为实体名的复数。表“cars”包含“car”实体。因此,将创建电影表。我希望这就是你的意思。@Steve Greene:默认情况下,EF使用
PluralizingTableNameConvention
所以表名将是“Movies”是的,我要做的第一件事就是禁用该约定。我的评论更多的是为了理顺数据库和表之间的关系。顺便问一下,你们有任何MS页面这样说吗?我在任何地方都找不到它。请看这个问题:还有MSDN链接:-参见底部的示例。即使数据库是由EF创建的,它仍然使用类名而不是DbSet属性名。它使用转换,因此如果它无法将类名与表名匹配,会发生什么情况?EF将引发异常:支持“MovieDBContext”上下文的模型自数据库创建以来已更改。考虑使用代码第一迁移来更新数据库()。它指出,如果EF创建的数据库更改了代码的名称>电影属性<代码> MOVIEDBWORKEX/COMPUT>可能导致错误。然而这不是真的。在这种情况下,更改
电影
属性的名称不会导致错误。
<add name="MovieDBContext" 
   connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" 
   providerName="System.Data.SqlClient" 
/>