为什么Entity Framework在我的列名中包含方括号? '

时间:2014-12-31 16:22:54

标签: c# sql-server entity-framework visual-studio tsql

我正在通过控制台应用程序中的(简单)Entity Framework example工作,以了解EF中的数据库迁移的基础知识。所有其他表和列都正常生成,但在SQL Server Express中使用尖括号创建了一个Column('[Content]'而不是'Content')。

我在类声明中看不到任何东西

 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标志)

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])

这将表明为什么使用尖括号生成此特定列?

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

方括号是一种在SQL中引用标识符的方法。因为EF必须能够处理任意名称(如“某些列名”),所以它会引用所有内容以确保它生成有效的代码。

答案 1 :(得分:1)

我不是EF的专家,但我猜它是在“内容”周围添加方括号,因为这是SQL中的保留关键字(看起来它与XML数据类型一起使用);只要有可能发生冲突,您可以使用T-SQL中的方括号语法来表示标识符(表/列名称)。