在动态数据中设置服务字段值

时间:2009-03-28 23:33:40

标签: asp.net linq-to-sql dynamic-data

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

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

由于

2 个答案:

答案 0 :(得分: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 表。

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

答案 1 :(得分:0)

将来最好的解决方案是使用刚刚在MIX09上发布的.Net RIA服务预览的DomainService部分,请看这里的视频:

.NET RIA Services - Building Data-Driven Applications with Microsoft Silverlight and Microsoft ASP.NET

Microsoft ASP.NET 4.0 Data Access: Patterns for Success with Web Forms

第一个是从Silverlight的角度来看.net RIA服务的入口,但更多应用于DD,第二个是David Ebbo在MIX上的演示,并展示了DomainService如何与DD合作我认为这是前进的方向您可以在DomainService中执行所有业务逻辑。