我对此代码有些疑问:
class Program
{
static void Main(string[] args)
{
Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());
using (var context = new MyContext()) {
var newType = new SysType { Name = "New Name" };
context.SysTypes.Add(newType);
context.SaveChanges();
}
using (var context = new MyContext()) {
Console.WriteLine(context.SysTypes.FirstOrDefault());
}
Console.ReadLine();
}
}
public class SysType
{
public int Id { get; set; }
public string Name { get; set; }
}
public class MyContext : DbContext
{
public MyContext() : base("name=MyDb") { }
public DbSet<SysType> SysTypes { get; set; }
}
在执行程序期间,会发生异常:
System.Data.Entity.Infrastructure.DbUpdateException“
System.Data.SqlClient.SqlExeption:不允许对系统目录进行临时更新。
但数据库确实已创建(发布不允许发布的图片)
![SQL Server对象资源管理器视图]
如果尝试查询表的数据,则抛出异常
![查询表数据时例外]
如果我使用SQL脚本手动创建表,则表查询成功。
- 经过几个小时,我意识到这是因为桌子的名字。
如果更改表名 - 完全可以正常工作。
我的问题是:为什么我的表名SysType
会抛出异常? Аnd是否有其他表格的名称导致类似的问题?
我很高兴听到我的问题的答案
更新:模型第一种方法 - 相同的结果
答案 0 :(得分:2)
因为您拥有的实体将被创建为dbo.SysTypes
,因为它是数据库中也是dbo.SysTypes
的现有系统表。
您的实体将生成为dbo.SysTypes
,因为生成表格时dbo
是默认架构名称,而SysType
将SysTypes
复数为[TableAttribute("Application_SysTypes")]
modelBuilder.Entity<SysType>().ToTable("Application_SysTypes")`
}。
解决方案是手动配置生成的表名,您可以使用属性:
{{1}}
或使用流利的api:
{{1}}
答案 1 :(得分:0)
systypes是SQL Server中的系统表:http://technet.microsoft.com/en-us/library/aa260587(v=sql.80).aspx
所有系统表的列表:http://technet.microsoft.com/en-us/library/aa260604(v=sql.80).aspx