'CompanyName.Foo' ist ein 'Namespace', wird aber wie ein 'Typ' verwendet

Wiederholung der Frage

Ich wiederhole diese Frage, weil ich heute gerade wieder auf diesen Fehler gestoßen bin, und bin immer noch völlig verwirrt, warum der C # -Compiler die Suche nach Kollisionen zwischen Namespaces und Typen in Kontexten anstrengt, in denen es keinen Sinn macht, dass ein Namespace existiert.

Wenn ich habe...

public Foo MyFoo { get; set; }

... warum sollte sich der Compiler darum kümmernFoo ist sowohl ein Namespace als auch ein Typ? Können Sie eine Eigenschaft als Namespace anstelle eines Typs deklarieren?

Welche Logik steckt hinter dem Compilerfehler "Namespace wie Typ verwendet"? Vor welchem ​​Problem rettet mich das?

[Und wie tagge ich Eric Lippert? :)]

Ursprüngliche Frage

Das Problem

Ich habe ein Projekt "Foo" mit Standard-NamespaceCompanyName.Foo. Ich habe eine Datenbank, die auch "Foo" heißt.

Und wenn ich SqlMetal.exe in der Datenbank starte, generiert es eine KlasseCompanyName.Foo.Models.Foo.

Wenn ich dann versuche, eine Eigenschaft mit dieser Klasse als Typ zu erstellen, so ...

using CompanyName.Foo.Models;
...
public Foo DataContext { get; set; }

... ich bekomme den Fehler:

'CompanyName.Foo' ist ein 'Namespace', wird aber wie ein 'Typ' verwendet.

Ich bin gezwungen zu tun ...

public CompanyName.Foo.Models.Foo Foo { get; set; } // :-(

Fragen:

Warum tritt dieser Fehler auf? Meine Eigentumserklärung enthält nichtCompanyNameWarum ist das ein Problem? Einfach gesagt:Foo != CompanyName.Foo. Zur Sicherheit habe ich auch meine gesamte Lösung nach durchsuchtnamespace Foo und lieferte null Treffer (wenn ich tatsächlich einen Namespace verwendet hätte)FooIch könnte verstehen, einen Fehler zu bekommen).

[antwortete] Gibt es eine Möglichkeit, sich voll zu qualifizieren?Foo jedes Mal, wenn ich es verwenden möchte?

[antwortete] Gibt es eine Möglichkeit, SqlMetal dazu zu bringen, der Klasse einen anderen Namen zu geben alsFoo (ohne den Namen meiner Datenbank zu ändern)? Ich kann den Namespace mit einem Schalter ändern, aber ich kenne keine Möglichkeit, den tatsächlichen Klassennamen zu ändern.

Aktualisieren

Ich suche immer noch eine Antwort auf (1).

OK W. genagelt (2) & (3).

Verwendung

Eine Anfrage wurde für alle meine gemachtusing Aussagen:

using System;
using System.ComponentModel;
using System.Data.Linq;
using System.Linq;
using MyCompany.Foo.Models;

Antworten auf die Frage(8)

Ihre Antwort auf die Frage