Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么实体框架在我的列名中包含方括号';_C#_Sql Server_Entity Framework_Visual Studio_Tsql - Fatal编程技术网

C# 为什么实体框架在我的列名中包含方括号';

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

我正在一个控制台应用程序中通过一个(简单的)示例学习EF中数据库迁移的基础知识。所有其他表和列都可以正常生成,但这一列在SQL Server Express中是用尖括号创建的(“[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标志)

)

这说明了为什么要生成包含尖括号的特定列


有人能帮忙吗?

方括号是在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])