我正在通过控制台应用程序中的(简单)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])
)
这将表明为什么使用尖括号生成此特定列?
有人可以帮忙吗?
答案 0 :(得分:1)
方括号是一种在SQL中引用标识符的方法。因为EF必须能够处理任意名称(如“某些列名”),所以它会引用所有内容以确保它生成有效的代码。
答案 1 :(得分:1)
我不是EF的专家,但我猜它是在“内容”周围添加方括号,因为这是SQL中的保留关键字(看起来它与XML数据类型一起使用);只要有可能发生冲突,您可以使用T-SQL中的方括号语法来表示标识符(表/列名称)。