Nov
26
Posted by:
Michael Washington
11/26/2007
This uses this post from Benjamin Hermann as an example.
First, Install ASP.NET 3.5 and Visual Studio 2008
Use Visual Studio 2008 to open DotNetNuke:

You will get a message like this:

Click Yes. This will add the needed changes to the web.config to allow LINQ to SQL to run.
Create a module (see this tutorial for instructions on creating a simple DotNetNuke module).

Right-click on the module folder under App_Code and select Add New Item...

Select the LINQ to SQL Classes template, give the .dbml file a name and click Add.

When the .dbml file opens you can modify it's connection properties. Expand the Connection section and select SiteSqlServer from the dropdown. This instructors the module to use the database connection that the DotNetNuke site is running on.

Next, in the Server Explorer, right-click on Data Connections and click Add Connection.

Enter the connection information for the database and click OK. This is only for the designer. At run-time the module will use the connection string indicated in the earlier step.

You can now expand the Tables section of the Database connection you created and drag the Users table to the Object Relational Designer.

Under Properties, select UserDataContext from the drop-down.

Supply a Context Namespace and an Entity Namespace. Note, if the .dbml file connection properties have changed when you created the Data Connection in the Server Explorer...

Change them back to SiteSqlServer (Web.config).
Now, in your module you can place a GridView on an .ascx control and use code like this to fill it with data:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace DotNetNuke.Modules.Test
{
public partial class View : DotNetNuke.Entities.Modules.PortalModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
UsersDataContext mydata = new UsersDataContext();
var results = from abc in mydata.Users select abc;
GridView1.DataSource = results;
GridView1.DataBind();
}
}
}

You can download the sample module here: Test_01.00.00_Install.zip
Note: In order to run this module on another DotNetNuke site, you need to modify the web.config:
Change: the <system.codedom> section to:
<system.codedom>
<compilers>
<compiler language="vb;vbs;visualbasic;vbscript" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" extension=".vb" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="OptionInfer" value="true"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
Change: the <assemblies> section to:
<assemblies>
<add assembly="Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
10 comment(s) so far...
Re: Using LINQ to SQL with DotNetNuke
Michael, nice example. It would have been even better if the example would not use any core tables for demonstration. A beginner might think that this code encourages of using direct core data table access in favor for using the framework. Instead of using LINQ for SQL, the same example works also against the framework and LINQ to objects:
var results = from user in UserController.GetUsers(PortalId).Cast select user ; GridView1.DataSource = results; GridView1.DataBind();
By cshark on
11/26/2007
|
Re: Using LINQ to SQL with DotNetNuke
Yes I agree you should NOT access Core tables directly. In the future I will make a better tutorial that will show you how to create your own tables from scratch. Yes LINQ for objects is great and should be used, It also does not require a web.config modification. However, LINQ to SQL is a massive code savings that cannot be ignored.
By AdefWebserver on
11/26/2007
|
Re: Using LINQ to SQL with DotNetNuke
Thanks Michael, nice article. How would you use Link to SQL for operations like adding/editing/deleting a record in a DNN module? Is it advisable to use the framework DAL/DAL+, for these operations and have LINQ work on the querying/getting this data?
By wilan on
11/26/2007
|
Re: Using LINQ to SQL with DotNetNuke
I just got my hands on VS2008 so I'm still "feeling things out". My intention is to use Link to SQL for all operations like adding/editing/deleting a record because it should be a massive code and time savings.
By AdefWebserver on
11/26/2007
|
Re: Using LINQ to SQL with DotNetNuke
I was wondering when we'd see the first MW linq post... great stuff, thanks!!!
By y01nk on
11/26/2007
|
Re: Using LINQ to SQL with DotNetNuke
Can we have the example for the WAP model ?
By IndianGuru on
11/27/2007
|
Re: Using LINQ to SQL with DotNetNuke
I tried this with a WAP version, replaced the values suggested here in the web.config, but still get an assembly conflict:
The type 'System.Web.UI.ScriptManager' exists in both 'c:\Windows\assembly\GAC_MSIL\System.Web.Extensions\3.5.0.0__31bf3856ad364e35\System.Web.Extensions.dll' and 'c:\Windows\assembly\GAC_MSIL\System.Web.Extensions\1.0.61025.0__31bf3856ad364e35\System.Web.Extensions.dll
By jkergosi on
12/11/2007
|
Re: Using LINQ to SQL with DotNetNuke
One limitation here. I note that you are using the objectQualifier token which is used to name SQL objects according to prefix defined in the web.config. Ex: {databaseOwner}[{objectQualifier}ThingsForSale]
Since LINQ dynamically references the database structures via mappings in its DBML file, LINQ will not be aware of the object qlalifier. It will error out if a DNN install uses an object qualifier. Probably better to leave it out of your SQL.
By jkergosi on
12/13/2007
|
Re: Using LINQ to SQL with DotNetNuke
can we use control LinqDataSource in module dotnetnuke?
By vinh on
7/10/2009
|
Re: Using LINQ to SQL with DotNetNuke
I can create module follow your instructions. Now, I want to create edit content to user. Please! Can you help me! Thanks!
By Nguyễn Vinh on
1/9/2012
|