【发布时间】:2011-07-21 19:09:41
【问题描述】:
我有一个使用 LinqToSql (.dbml) 的动态数据 4 站点,用于 2 个具有一对一关系的表。一个表(子表)并不总是有对应于主表的行。
只要是这种情况(没有子表行)而不是空行单元格,DD ForeignKey.ascx 字段模板就会显示一个链接到:
Childtable/Detail.aspx?ChildPkField=PRIMARYTABLEGUID
我找不到阻止这种情况发生的 SQL F 键设置和/或 .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
【问题讨论】:
标签: asp.net foreign-keys dynamic-data one-to-one