3

在我的项目中,许多表通过 ApplicationId 外键链接到 aspnet_Application 表。我不希望用户查看或编辑它,所以我正在寻找在执行插入查询之前预设此 sql 表字段值的方法。我仍然为此列启用了脚手架(以便 DD 生成正确的 sql 脚本),但我在所有编辑/列表/插入页面中隐藏了此列/字段。

理想情况下,我正在为我的 LinqToSql 类中的任何表执行 DynamicInsert 之前寻找一个注入代码的地方。

谢谢

4

2 回答 2

2

因此,经过一番挖掘,我想出了一个可以接受的解决方案。我为我的数据上下文创建了一个部分类,并为每个链接到aspnet_Applications的表添加了一个部分Insert_方法。在每种方法中,我都将ApplicationId字段设置为当前应用程序 ID。

它看起来像这样:

public partial class MyDataContext
{
    partial void InsertMyTable(MyTable instance)
    {
        instance.ApplicationId = HttpContext.Current.Session["ApplicationId"] as Guid?;
    this.ExecuteDynamicInsert(instance);
    }
}

请注意,在此方法中您不能执行其他 LINQ 语句。特别是我必须将应用程序 ID 存储在会话中,而不是查询aspnet_Applications表。

虽然这是可以接受的解决方案,但它并不完美(大量重复的代码),所以如果有人知道更好,请在这里给我一个骨头:)

于 2009-03-29T04:07:52.570 回答
0

将来最好的解决方案是使用刚刚在 MIX09 发布的 .Net RIA 服务预览版的 DomainService 部分,请参阅此处的视频:

.NET RIA 服务 - 使用 Microsoft Silverlight 和 Microsoft ASP.NET 构建数据驱动的应用程序

Microsoft ASP.NET 4.0 数据访问:Web 表单的成功模式

第一个是从 Silverlight 的角度对 .net RIA 服务的介绍,但它更多地应用于 DD,第二个是 David Ebbo 在 MIX 上的演示,展示了 DomainService 如何与 DD 一起工作我认为这是前进的方向,因为你可以做DomainService 中的所有业务逻辑。

于 2009-03-29T09:46:06.017 回答