Warum nicht eine einfache entity data model Beziehung null zurück statt einer Referenz auf ein Objekt?

Habe ich 2 einfache Tabellen und einer foreign key-Definition in SQL Server Express:


Produkt

  • ProductID [auto-inc]
  • Namen
  • CompanyID [not null]

Unternehmen

  • CompanyID [auto-inc]
  • Namen

FK_Product_Company

  • Produkt.CompanyID = Unternehmen.CompanyID

Erstellte ich eine ADO.NET Entity Data Model und Hinzugefügt, alle Tabellen zu. Die .edmx-Datei zeigt die 1-zu-viele-Beziehung in der designer. Ich manuell gefüllt, die Datenbank mit Daten, die sicherstellen, dass jedes Produkt hat eine Firma. Immer wenn ich versuche, Zugriff auf ein Produkt der Firma, aber es gibt immer null anstelle einer Instanz eines Unternehmens.

Zum Beispiel, führen Sie den folgenden code in C#, wird null zurückgegeben:

var _db = new MyDBEntities();
var product = (from p in _db.Product
               where p.ProductID == 3
               select p).First();
product.Company //== null

Gibt es irgendwelche Schritte, die ich bin fehlt, diese zu arbeiten?

Dank


Dinge, die ich versucht habe:


Ausführen der folgenden SQL -, gibt das Unternehmen richtig aufnehmen.

SELECT Company.*
FROM Product
  LEFT JOIN Company ON (Product.CompanyID = Company.CompanyID)
WHERE Product.ProductID = 3

Das nächste, was ich tun würde, um debug-dieses Problem wäre, um führen Sie den folgenden code:

var _db = new MyDBEntities();
var product = (from p in _db.Product
               where p.ProductID == 3
               select p).First();
var company = (from c in _db.Company
               where c.CompanyID == product.CompanyID
               select c).First();

Jedoch, die nicht kompiliert werden, da das Feld Produkt.CompanyID ist verdeckt durch den ORM-generator und ich sehe nicht, eine option in designer es hinzufügen.


Ist die nächste beste Sache zu laufen, ich Schätze, ist die folgende, und es kehrte zurück, ein Unternehmen:

var _db = new MyDBEntities();
var company = (from c in _db.Company
               where c.CompanyID == 2
               select c).First();

Nur klar zu sein, ein Produkt mit der ID 3 entspricht Unternehmen mit der ID 2.


Ich habe versucht, erstellen die genau die gleiche Beziehung mit LINQ to SQL-Klassen und es funktioniert gut.

Natürlich statt mit dem DB-Entitäten-Klasse, ich bin mit der Daten-Kontext-Klasse.

Schreibe einen Kommentar