Examples of EF5 Table Per Type that I have found, such as this one use the [Table("tablename")]
attribute to mark a class as defining a table.
When I add this attribute I get errors:
Error 1 The type or namespace name 'TableAttribute' could not be found (are you missing a using directive or an assembly reference?) E:\EShared\Syrius6\syrius_syrius\SBD.Syrius.DomainClasses\Classes.cs 599 6 DomainClasses
Error 2 The type or namespace name 'TableAttribute' could not be found (are you missing a using directive or an assembly reference?) E:\EShared\Syrius6\syrius_syrius\SBD.Syrius.DomainClasses\Classes.cs 599 6 DomainClasses
I have the line
using System.ComponentModel.DataAnnotations;
in my namespace
And I am using framework 4 because I want the app to run on Windows XP.
[Update] I had a look at the link flagged as a possible duplicate here, and as a consequence added a reference to System.Data.Linq and a using System.Data.Linq
The error messages are now
Error 1 The type or namespace name 'TableAttribute' could not be found (are you missing a using directive or an assembly reference?) E:\EShared\Syrius6\syrius_syrius\SBD.Syrius.DomainClasses\Classes.cs 599 6 DomainClasses
Error 2 Using the generic type 'System.Data.Linq.Table<TEntity>' requires 1 type arguments E:\EShared\Syrius6\syrius_syrius\SBD.Syrius.DomainClasses\Classes.cs 599 6 DomainClasses
Importantly, I want my code to work on Windows XP , and the second answer to the possible duplicate requires framework 4.5
[Update] Code is as follows;
namespace SBD.Syrius.DomainClasses
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Data.Linq;
[Table("Product")]
public class Product : LoggedEntity
{
[Required]
public string BuyUnitMeasure { get; set; }
[Required]
public Decimal BuyUnitQuantity { get; set; }
[Required]
public String Code { get; set; }
[Required]
public string Name { get; set; }
[Required]
public String SellUnitMeasure { get; set; }
[Required]
public Decimal SellUnitQuantity { get; set; }
public virtual Template Template { get; set; }
[Required]
public string UnitMeasure { get; set; }
public override string ToString()
{
return !string.IsNullOrEmpty(this.Name) ? this.Name : "Products";
}
}
public abstract class LoggedEntity
{
public int Id { get; set; }
public Guid RowId { get; set; }
[ConcurrencyCheck]
public int RowVersionId { get; set; }
public int SourceSiteNumber { get; set; }
}
}
[Update]
I corrected the using to be using System.Data.Linq.Mapping;
Now my error is
System.Data.Linq.Mapping.TableAttribute' does not contain a constructor that takes 1 arguments
[Update]
I also looked at the not accepted answer to the suggested duplicate question. Which is to use System.ComponentModel.DataAnnotations however this requires framework 4.5 and I don't think I can use that because it wont run on Windows XP, and I need to run on XP.
[update]
I am developing on Windows 7 but the application needs to run on XP. I see the example I am trying to follow Here it is again uses Framework 4.1 Fluent
My question is Can I use TPT on EF5 to run on Windows XP? If so, how?
The class you are trying to use is new to Entity Framework 5. You can't use Entity Framework 5 on XP because it requires .NET 4.5. The reason you are getting the errors is NuGet likely downloaded Entity Framework 4.4.
What the properties look like when you download it from NuGet from a .NET 4.0 project
What the properties look like when you download it from NuGet from a .NET 4.5 project
Your only two options are
TableAttribute
First of all, remove the
System.Data.Linq
namespace and don't use theTableAttribute
from there. It is for LINQ-to-SQL and not for Entity Framework.Between version 4.1 and 5.0 of Entity Framework the
Table
attribute (among others) has been moved around a bit between namespaces and assemblies:Depending on the version you can find the attribute at the follwing places:
Entity Framework 4.1 to 4.3 and target framework .NET 4.0
EntityFramework.dll
assembly to your projectusing System.ComponentModel.DataAnnotations;
to code fileEntity Framework 5.0 and target framework .NET 4.0 (This combination is also called Entity Framework 4.4)
EntityFramework.dll
assembly to your projectusing System.ComponentModel.DataAnnotations.Schema;
to code fileEntity Framework 5.0 and target framework .NET 4.5
System.ComponentModel.DataAnnotations.dll
assembly to your projectusing System.ComponentModel.DataAnnotations.Schema;
to code fileThe
TableAttribute
has kept its old purpose and meaning in all versions. Especially it's the correct one to use for TPT.In your situation where you want to support Windows XP but use EF 5.0 you need .NET 4.0 as target framework. To get the correct
TableAttribute
you have to do:EntityFramework.dll
assembly to your project (most likely you have that already)EntityFramework.dll
and add a reference to theEntityFramework.dll
assembly in the pathpackages\EntityFramework.5.0.0\lib\net40
under your solution folderusing System.ComponentModel.DataAnnotations.Schema;
to code fileStart with the last of these three points, maybe it's your only problem that you have to append
.Schema
to theusing
directive.