Adding CLR UDF to SQL Server Database Project in Visual Studio 2010 - visual-studio-2010

I've created a new database project to group together all my useful stored procedures and functions so they can be easily deployed to any of my servers.
I'd like to add a couple of CLR UDFs. I tried adding a CLR project to my solution but this wants to be given a specific database to deploy to which is in conflict with the rest of the solution as the point is I want to be able to deploy anywhere!
Am i missing something?!
Sam : )

The solution was this...
Create a SQL Server 2005/2008 Database Project (inluding a new solution)
Add a SQL CLR database project to the solution but click cancel when it asks for a database
Add a reference to your CLR project from your main database project
Uncheck the deployment option on the CLR project
That was it, now when I deploy my database project it includes the CLR functions wherever I choose to deploy it.
Luckily some guy had documented the whole process so go check it out here

We added a normal class library to our solution, containing a class with static methods for our UDFs.
eg:
[SqlFunction(IsDeterministic = true, IsPrecise = true)]
public static bool MyMethod(string x)
{
...
}
Then add a reference to this project from the database project.

Related

Unresolved References to Same Database Project

I've created a SQL Server database project in Visual Studio 2013 and imported a DACPAC taken from a production database. When I tried to build the project I get hundreds of SQL71501 and SQL71561 errors (both of which are "unresolved reference to an object"). Examining the scripts the problem is that many views and stored procedures use three part names: [database].[schema].[object].
It appears that Visual Studio 2013 throws this error whenever it comes across a three part name that includes the database represented by the database project. eg If the database project represents database "MyDatabase" and a SQL script in that project includes something like SELECT t.Column1 FROM MyDatabase.dbo.MyTable t then VS 2013 throws either SQL71501 or SQL71561 when I build the project.
Is there any way of suppressing unresolved reference errors that just apply to the current database? I still want Visual Studio to throw errors for unresolved references to external databases.
EDIT, Correction: Originally stated the error code was SQL71501. However, it appears Visual Studio throws both SQL71501 and SQL71561 errors for unresolved references to the same database.
Well actually there are two workarounds. My personal opinion is that there is a bug in SSDT concerning 3-part object names in the current database.
Create your project snapshot (dacpac) and reference it as a database reference. Remember to clear database variable field in the 'Add database reference' dialog.
It works however this approach is not recommended by Microsoft and can cause other problems:
https://connect.microsoft.com/SQLServer/feedbackdetail/view/1047094/post-deployment-script-is-not-generated-in-the-publish-script
At your code replace all occurrences of MyDatabase.dbo.MyTable with [$(DatabaseName)].dbo.MyTable
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/1863d960-d32d-4920-9a30-13dc86c6f857/sql71562-unresolved-reference-to-object-followd-by-database-name-in-the-same-project?forum=ssdt&prof=required
In Visual Studio:
1) Open SQL Object Explorer, link your database server, right click on unresolved reference database and "Extract Data tier application"
2) Insert a file path. Normally I use \Documents\SQL Server Management Studio\DAC Packages\ and click OK
3) Waiting for extraction
4) Right click on your project References and Add Database Reference
5) Then replace references in your functions, SP, .. with [$(YourDB)] prefix

Missing "Ado.Net Entity Data Model" on Visual Studio 2013

I have created new web project but I can't find ADO.net Entity DAta Model to add it.
How to fix it or Install it ?
Go to "C:\ProgramData\Package Cache" and search for "EFTools.msi".
You should find two files, just install the most recent one (it should be about 960KB). This fixed the problem for me.
i have the same problem, but there is no "EFTools.msi" in "C:\ProgramData\Package Cache" for me...
UPDATE :
i download and install "Entity Framework 6 Tools for Visual Studio 2012 & 2013" and it solved the problem \m/
Download Link
Some web tutorials show a 'ADO.NET data entity model' item in the 'Models->Add' menu. In VS2015 this menu item is not shown. You need to keep drilling down by selecting 'New Item...' and then further selecting 'Data' from the pop-up dialog.
My solution was none like the above.
The .msi file was nowhere in the folders suggested in prior answers, nor doing a search in my hard drive found any EFTools.msi instances.
So the failsafe approach came through this article (since the author appears to have completely removed the page from the server, I've changed the URL to a version of the page stored in Google's cache), which was poorly written by a chinese fella, so I'm gonna try to rewrite the steps in a clearer way:
The solution is as follows:
Open your VS2013 installation ISO (or pop the DVD in) and navigate to "\packages\EFTools" folder;
There you will find 2 files (a .cab file and a .msi file);
Copy both files to a directory on your hard drive;
[Optional]: You can create in that same directory, an empty .txt file ("Log.txt") so that the installation log output will be redirected to it later;
Open a MS-DOS command prompt (with administrative rights) and type the command: EFTools.msi USING_EXUIH=1 /log "Log.txt" [NOTE: If you did not perform step #4, then you do not need to type from the ' /log' on (inclusive)]
Wait patiently while the installation process finishes. Takes quite some time (guess never hurts to remind you that this needs to be done with VS2013 closed). The installation should go fine, anything weird will be logged into the text file (the one you created in step #4).
Or, you might just double-click the .msi file if you are feeling brave..
After installation, open VS2013 and try adding a new item to the Models folder. The "ADO.NET Entity Data Model" should have reappeared under the "Data" tab.
Recognition goes to the anonymous chinese poster on that link (er, "Melinda"?) - xiè-xiè!
Be sure you are trying to do that in .Net Framework project. For example, when you are creating a project do not use a template called Windows Forms App (.Net Core), use Windows Forms (.Net Framework). The (.Net Framework) extension is important.
right click on your project--> properties---> framework target select 4.5 and should work.
It's only for Visual Studio 2012. For me this had no effect on 2013.
For the record, if you have Visual Studio 2015 RC, the "EFTools.msi" can't be downloaded from Microsoft
If you accidentally delete the "ProgramData" folder, the Repair option will not work, you have to use the Add or Remove features option from the installer, and check the SQL Server Data Tools
Make sure the type of project you've added is for .NET Framework and not for .NET Standard. The templates for adding things such as ADO.NET Entity Data Model are included for .NET Framework.
For Visual Studio 2017 the following works.
Create project:
Create new project of type 'Class Library'
Install 'Entity Framework' from NuGet
Now add datamodel:
In project click 'Add New Item'
Select 'Visual C# Items' -> 'ADO.NET Entity Data Model'
I recently added Entity Framework and installed in one of my many projects in a single sln file.
The thing is Entity Framework works on Framework higher than 3.5.
So Class Library of NET Standard wouldn't support Entity Framework, thus missing Ado.Net Entity Data Model, Since NET Standard console Library is Framework 2.0, changing the class Library to .NET Framework one, will include Ado.Net Entity Data Model.
I had the same issue, but found out that I was selecting ASP.NET Core web App, ASP.NET Core web App(MVC) etc, Instead Choose ASP.NET Web Application (.NET Framework) and you will get the ADO.NET Entity Data Model option.
Go to visual studio installer.
Add:
Entity framework tool 6
Download and install it.

Using ADO.NET's Entity Framework with visual studio 2010 and NuGet - what's really happening

I'll need to use ADO.NET EF for my next project so I started a tutorial but ended up with installing Entity Framework while my Project was open through Project -> Manage NuGet Packages and then decided to walk through the tutorial using another project so I closed the current one and on the next day I created new Console Project for the needs of this tutorial. However when I tried to add using System.Data.Entity; to my Program.cs it didn't recognize the Entity so I had to install again Entity Framework from NuGet which seems kind of strange to me.
Is this how it should be - installing the Entity Framework for every project that will use it or I can install it once and then add it as reference where needed or something like that like many other packages in .NET?
No, you shouldn't need to install Entity Framework for each project. Did you try adding a reference to the missing DLL? To do this, right-click your project in Solution Explorer and select Add Reference from the menu. You should be able to select System.Data.Entity from the .NET tab:

how can i use Entity Framework 4.1 in Visual Studio 2012?

I have a web application on a web farm and i use .NET 4 and entity data model 4.1.
when i started working on this web application i used visual studio 2010, and today i have uninstalled it and installed new version (Visual Studio 2012).
Due to some reasons, i have deleted my ado.net entity data model to recreate it, but i
pay attention that visual studio 2012 use entity framework 5 not 4.1. I have updated it but in old model i can context constructor to change my connection string but in this new model have no constructor, is that true?
I have installed EF 4.1 but it doesn't works and I've added version 5 to my project.
Background info: my web application is on a shared host and i can not update it to EF 5.
How can i use entity framework 4.1 in visual studio 2012 ?
is that possible? if yes, how?
Remove Existing (Entity framework 5)
Remove the existing reference (to Entity framework 5) under the References section in your Project in Solution explorer.
Remove the corresponding entry from your packages.config file. If you open the packages.config file, you will see an xml structure and you will see an element with id EntityFramework with version attribute value as 5.0.0. Remove that line( that package element).
Add Again (Entity framework 4.1)
Now go to the package manager window(View->Other Windows -> Package Manager Console) and execute the following command there.
Install-Package EntityFramework -Version 4.1.10331.0
This will download EF 4.1 to your project and you will see the success message like below.
Reference : http://nuget.org/packages/EntityFramework/4.1.10331.0
Always keep in mind that there are a lot of improvements made in EF 5. So consider to consume all those as possible as you can.

After migrating a VS 2005 project to VS 2010, I have web references causing troubles

I have a winform project build on VS 2005 and framework 2. Recently, we moved to VS 2010, but keeping the framework v2 as target.
Everything runs fine except my web references.
When I update the web references, a new file "Reference1.cs" is created, under the reference.map file. This is causing troubles as original "Reference.cs" is still here and all classes are duplicated.
Here is the project structure :
My winform project
Web references
MyWebServiceReference
WebService.disco
webservice.wsdl
Reference.map
mycomplextype.datasource
Reference.cs
Reference1.cs
On the reference.map file, I have a custom tool defined : MSDiscoCodeGenerator. This custom tool seems to throw a warning :
Warning 1 A custom tool 'MSDiscoCodeGenerator' is associated with file 'Web References\MyWebService\Reference.map', but the output of the custom tool was not found in the project. You may try re-running the custom tool by right-clicking on the file in the Solution Explorer and choosing Run Custom Tool.
If I run the custom tool, the file reference1.cs is generated...
thanks in advance for the help.
I would try deleting the web reference and re-adding instead of updating.

Resources