2012-06-15 3 views
4

Привет, я пытаюсь изучить LINQ, а в LINQ to SQL у меня есть следующее исключение: Это пример кода Linq In Action by Manning. Что не так?Ошибка в LINQ to SQL: указанный листинг недействителен

 DataContext db = new DataContext("E:\\Mahesh\\TempFolder\\DB\\NORTHWND.MDF"); 

     var contacts = 
      from contact in db.GetTable<Contact>() 
      where contact.City == "Paris" 
      select contact; 

     foreach (Contact aContact in contacts) 
      Console.WriteLine("Bonjour " + aContact.Name); 
     Console.Read(); 
    } 
} 

[Table(Name = "Customers")] 
class Contact 
{ 
    [Column(IsPrimaryKey = true)] 
    public int CustomerID { get; set; } 
    [Column(Name = "ContactName")] 
    public string Name { get; set; } 
    [Column] 
    public string City { get; set; } 
} 

Error

Исключительные детали:

System.InvalidCastException was unhandled 
HResult=-2147467262 
Message=Specified cast is not valid. 
Source=System.Data 
StackTrace: 
    at System.Data.SqlClient.SqlBuffer.get_Int32() 
    at Read_Contact(ObjectMaterializer`1) 
    at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() 
    at LinqDemo.Program.Main(String[] args) in c:\Users\MAHESH\Desktop\TechNode\C#\MyTechDos\LinqDemo\LinqDemo\Program.cs:line 51 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 
InnerException: 
+1

Ick, это VS2012? – Rawling

+3

Не размещайте изображения, кроме кода. –

+0

Какой тип данных «contact.City»? Вы уверены, что это «строка»? – bluevector

ответ

5

Если мне не изменяет память, таблица Клиенты в Нортвинде не имеет КодКлиента в междунар (я думаю, что его NVARCHAR). Если вы написали класс Contact вручную, вместо того, чтобы генерировать его LINQ to SQL, убедитесь, что типы в вашем классе соответствуют типам в таблице базы данных

EDIT: по этой ссылке http://msdn.microsoft.com/en-us/library/bb399575(v=vs.90).aspx я склонен думать, что поле CustomerID не INT, но NVARCHAR (или NCHAR, если на то пошло)

0

Священная корова ... это был убийца для меня.

На самом деле это была проблема SQL Collation для меня, потому что я имел поле в LINQ к SQL называется Dataarea, но в моем SQL представлении это поле называется DataArea. Проблема была в верхнем корпусе A в Районе.

Обычно SQL не чувствителен к регистру для имен полей, но если ваша сортировка SQL является датскойNorwegian, то это действительно работает, и я получаю, что указанное задание недействительно.

Странная ошибка.

Смежные вопросы