C# 为什么实体框架在我的列名中包含方括号';
我正在一个控制台应用程序中通过一个(简单的)示例学习EF中数据库迁移的基础知识。所有其他表和列都可以正常生成,但这一列在SQL Server Express中是用尖括号创建的(“[Content]”而不是“Content”) 我在类声明中看不到任何东西C# 为什么实体框架在我的列名中包含方括号';,c#,sql-server,entity-framework,visual-studio,tsql,C#,Sql Server,Entity Framework,Visual Studio,Tsql,我正在一个控制台应用程序中通过一个(简单的)示例学习EF中数据库迁移的基础知识。所有其他表和列都可以正常生成,但这一列在SQL Server Express中是用尖括号创建的(“[Content]”而不是“Content”) 我在类声明中看不到任何东西 public class Post { public int PostID { get; set; } [MaxLength(200)] public string Title { get
public class Post
{
public int PostID { get; set; }
[MaxLength(200)]
public string Title { get; set; }
public string Content { get; set; }
public int BlogID { get; set; }
public Blog Blog { get; set; }
}
迁移文件
public partial class AddPostClass : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Posts",
c => new
{
PostID = c.Int(nullable: false, identity: true),
Title = c.String(maxLength: 200),
Content = c.String(),
BlogID = c.Int(nullable: false),
})
.PrimaryKey(t => t.PostID)
.ForeignKey("dbo.Blogs", t => t.BlogID, cascadeDelete: true)
.Index(t => t.BlogID)
.Index(p => p.Title, unique: true);
AddColumn("dbo.Blogs", "rating", c => c.Int(nullable: false));
}
public override void Down()
{
DropForeignKey("dbo.Posts", "BlogID", "dbo.Blogs");
DropIndex("dbo.Posts", new[] { "Title" });
DropIndex("dbo.Posts", new[] { "BlogID" });
DropColumn("dbo.Blogs", "rating");
DropTable("dbo.Posts");
}
}
或者在生成的SQL脚本中(我使用了-Verbose标志)
)
这说明了为什么要生成包含尖括号的特定列
有人能帮忙吗?方括号是在SQL中引用标识符的一种方法。因为EF必须能够处理任意名称(如“某个列名”),所以它引用所有内容以确保生成工作代码。我不是EF方面的专家,但我猜它在“内容”周围添加了方括号,因为这是SQL中的保留关键字(看起来它与XML数据类型一起使用);每当有可能发生冲突时,您都会在T-SQL中使用方括号语法来表示标识符(表/列名)。从您的代码中,看起来所有列都是用尖括号生成的。我也看不出在哪里会有一列被挑出来用于特殊行为。看起来您对SQL了解不多,甚至懒得阅读您在问题中发布的输出。不,只有一个特定的列名是-其他列名被SQL脚本中的尖括号包围,但在实际生成列名时,这些列名将被删除。这就是为什么我如此困惑的原因。挑剔的,
[]
被称为方括号。尖括号是
我想就是这样了-当我从对象资源管理器(右键单击表->'Design')在设计视图中查看表时,尖括号就在那里,但当我实际从记录集的列标题中的列检索数据时,尖括号被省略了。谢谢你们的帮助。
CREATE TABLE [dbo].[Posts] (
[PostID] [int] NOT NULL IDENTITY,
[Title] [nvarchar](200),
[Content] [nvarchar](max),
[BlogID] [int] NOT NULL,
CONSTRAINT [PK_dbo.Posts] PRIMARY KEY ([PostID])