【问题标题】:Why is Entity Framework including square brackets in my column name? ' [duplicate]为什么实体框架在我的列名中包含方括号? ' [复制]
【发布时间】:2014-12-31 16:22:54
【问题描述】:

我正在控制台应用程序中处理(简单)Entity Framework example,只是为了了解 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 标志)

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

)

这将表明为什么生成此特定列时包含尖括号?

谁能帮忙?

【问题讨论】:

  • 从您的代码看来,所有列都是用尖括号生成的。
  • 我也看不到哪一列因特殊行为而被挑出。看起来您对 SQL 了解不多,甚至懒得阅读您在问题中发布的输出。我投票结束这个废话。
  • 不,只有一个特定的列名是 - 其他的在 SQL 脚本中用尖括号括起来,但在实际生成列名时会删除这些列名。这就是为什么我这么难过..?
  • Nitpick, [ ] 被称为方括号。尖括号是< >

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


【解决方案1】:

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

【讨论】:

  • 我想就是这样 - 当我从对象资源管理器中查看设计视图中的表格时,尖括号就在那里(右键单击表格 - >“设计”)但是当我实际检索数据时它们被省略了来自记录集的列标题中的列。谢谢你们的帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    相关资源
    最近更新 更多