如何在Breeze在展开时生成的查询中设置列名

How to set up the column names in the query which is generated by Breeze in case of expand?

本文关键字:查询 设置 Breeze      更新时间:2023-09-26

我有下面的数据库结构和EF上下文,我想查询博客条目。在这种情况下,博客条目是指blog_entry(包括id和title字段)和blog_body,包括body_with_markup和body_without_markup字段。

我在Breeze中有一个查询,结果是服务器返回500错误,因为没有"BlogBody_Id"字段。我追踪到了breeze ef生成的查询,问题是在生成的查询中使用了"BlogBody_Id"而不是"Id"。我更改了查询中的列名,结果就是所需的结果。

在这种情况下,我可以看到两个选项:

  • 我相应地更改了数据库列名(数据库目前很小,所以不会对我造成太大伤害)。有什么指导方针吗
  • 有一种方法可以告诉Breeze可以使用列名

我的问题是关于第二个问题。如果可能的话,我该怎么做?我查阅了文档,没有发现任何与此问题有关的内容。

return EntityQuery.from('blogEntry')
                .select()
                .expand('blogBody')
                .using(newManager)
                .execute()
                .then(success)
                .catch(failed);
            function success(data) {
                console.log(data.results);
                return data.results;
            }
            function failed(msg) {
                console.log('error: ' + msg);
            }
CREATE TABLE [dbo].[BLOG_ENTRY](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [TITLE] [nvarchar](255) NOT NULL,
    [IS_PUBLISHED] [int] NOT NULL DEFAULT ((0)),
    [AUTHOR_ID] [int] NOT NULL DEFAULT ((1)),
    [CREATE_DATE] [datetimeoffset](7) NOT NULL DEFAULT (getdate()),
    [CREATED_BY] [int] NOT NULL DEFAULT ((1)),
    [LAST_CHANGED_DATE] [datetimeoffset](7) NOT NULL DEFAULT (getdate()),
    [LAST_CHANGED_BY] [int] NOT NULL DEFAULT ((1)),
 CONSTRAINT [PK_dbo.BLOG_ENTRY] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 75) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[BLOG_BODY](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [BODY_WITH_MARKUP] [text] NOT NULL,
    [BODY_WITHOUT_MARKUP] [text] NULL,
    [BLOG_ENTRY_ID] [int] NOT NULL,
    [CREATE_DATE] [datetimeoffset](7) NOT NULL DEFAULT (getdate()),
    [CREATED_BY] [int] NOT NULL DEFAULT ((1)),
    [LAST_CHANGED_DATE] [datetimeoffset](7) NOT NULL DEFAULT (getdate()),
    [LAST_CHANGED_BY] [int] NOT NULL DEFAULT ((1)),
 CONSTRAINT [PK_dbo.BLOG_BODY] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 75) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
ALTER TABLE [dbo].[BLOG_BODY]  WITH CHECK ADD  CONSTRAINT [FK_dbo.Blog_Body__Blog_Entry_Id] FOREIGN KEY([BLOG_ENTRY_ID])
REFERENCES [dbo].[BLOG_ENTRY] ([ID])
public class BlogEntry
    {
        public int Id { get; set; }
        [Required]
        [StringLength(255, MinimumLength = 3)]
        public string Title { get; set; }
        [Required]
        public int IsPublished { get; set; }
        public BlogBody BlogBody { get; set; }
    }
public class BlogBody
    {
        public int Id { get; set; }
        public string BodyWithMarkup { get; set; }
        public string BodyWithoutMarkup { get; set; }
        public int BlogEntryId { get; set; }
    }

问题的根源不在轻松方面,而是对象之间没有外键注释。我设置了对象之间的关系,现在它运行良好。