У меня есть сайт Dynamic Data 4, использующий LinqToSql (.dbml) для 2 таблиц с отношением один к одному. Одна таблица (дочерняя) не всегда имеет строку, соответствующую основной таблице.
В каждом случае (без строки дочерней таблицы) вместо пустой ячейки строки шаблон поля DD ForeignKey.ascx отображает ссылку на:
Childtable/Detail.aspx?ChildPkField=PRIMARYTABLEGUID
Я не могу найти какую-либо комбинацию настроек F-клавиш SQL и / или параметров свойств столбца .dbml, которые бы препятствовали этому. Пока единственным решением является пользовательский шаблон ForeignKey.ascx с
protected string GetDisplayString()
{
object value = FieldValue;
if (value == null)
{
//replace this
//return FormatFieldValue(ForeignKeyColumn.GetForeignKeyString(Row));
//with this
return "";
}
else
{
return FormatFieldValue(ForeignKeyColumn.ParentTable.GetDisplayString(value));
}
}
Очевидно, не оптимальное решение. Для упрощения я удалил все пользовательские метаданные для обеих таблиц и всех других связей, в которых были задействованы таблицы. Без изменений.
Я уверен, что это что-то простое, но я смотрю на это слишком долго - любая помощь приветствуется!
Вот текущие сценарии создания таблиц из Sql Manager:
CREATE TABLE [dbo].[UserProfile](
[UserId] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[ProfileUserName] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Profile] PRIMARY KEY CLUSTERED ([UserId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[UserProfile] ADD CONSTRAINT [DF_Profile_UserID] DEFAULT (newid()) FOR [UserId]
GO
и
CREATE TABLE [dbo].[SubscribedUser](
[subUserId] [uniqueidentifier] NOT NULL,
[subExpireDate] [date] NULL,
CONSTRAINT [PK_SubscribedUsers] PRIMARY KEY CLUSTERED ([subUserId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[SubscribedUser] WITH CHECK ADD CONSTRAINT [FK_SubscribedUser_UserProfile] FOREIGN KEY([subUserId]) REFERENCES [dbo].[UserProfile] ([UserId])
GO
ALTER TABLE [dbo].[SubscribedUser] CHECK CONSTRAINT [FK_SubscribedUser_UserProfile]
GO