Staramy się, aby struktura Entity działała w naszym sklepie z istniejącą bazą danych (dlatego zmiana schematu bazy danych NIE jest opcją), a testy jednostkowe, które stworzyliśmy w celu testowania rzeczy, wykazują pewne dziwne zachowanie.Entity Framework: Skąd się wziął te kolumny?
To SQL to wypluwa dla konkretnego obiektu mamy:
SELECT
[Extent1].[CommentTypeId] AS [CommentTypeId],
[Extent1].[DataPartId] AS [DataPartId],
[Extent1].[CommentId] AS [CommentId],
[Extent1].[CreatedTime] AS [CreatedTime],
[Extent1].[Message] AS [Message],
[Extent1].[From] AS [From],
[Extent1].[Likes] AS [Likes],
[Extent1].[SourceTypeId] AS [SourceTypeId],
[Extent1].[StatusMessage_DataPartId] AS [StatusMessage_DataPartId],
[Extent1].[Album_DataPartId] AS [Album_DataPartId]
FROM [dbo].[Comments] AS [Extent1]
Ostatnie dwie kolumny o, jak można zauważyć, nie jest jak inni. To dlatego, że tak naprawdę nie istnieją, i nie mamy pojęcia, dlaczego Entity żąda ich! Ani nasze pliki konfiguracyjne, ani nasze POCO nie wspominają o nich w ogóle. W rzeczywistości, jeśli chodzi o naszą bazę danych, są one całkowicie oddzielnymi pojęciami i nie są bezpośrednio powiązane.
Skąd się bierze te kolumny i jak mam je wyciąć?
EDYCJA: Aby odpowiedzieć na niektóre z poniższych pytań, 1) Używamy Entity Framework 4.2. Używamy płynnego mapowania.
2) Samo POCO wygląda tak, z bałaganem równości wycięty dla zwięzłości:
public long DataPartId { get; set; }
public string CommentId { get; set; }
public DateTime? CreatedTime { get; set; }
public string Message { get; set; }
public string From { get; set; }
public int? Likes { get; set; }
public string SourceTypeId { get; set; }
public int CommentTypeId { get; set; }
public virtual DataPart DataPart { get; set; }
public virtual CommentType CommentType { get; set; }
3) Nie używamy edmx. Mamy niestandardowy kontekst DbContext. Nie ma zbyt wielu linii, które są wyjątkowo interesujące. Te dwa są prawdopodobnie zainteresowania:
Configuration.LazyLoadingEnabled = true;
Configuration.ProxyCreationEnabled = true;
Poza tym, plik Kontekst jest dużo
modelBuilder.Configurations.Add(new WhateverConfiguration())
i
public IDbSet<WhateverPoco> PocoDatabaseTableAccessor { get; set; }
4) Zaczęliśmy db-pierwszy, ale że nie działało, więc obecnie robimy kod po raz pierwszy.
5) Jest to wnętrzności config dla tego konkretnego POCO:
HasRequired (x => x.DataPart)
.WithRequiredDependent (x => x.Comment);
HasRequired (x => x.CommentType)
.WithMany (x => x.Comments)
.HasForeignKey (x => x.CommentTypeId);
HasKey (x => x.DataPartId);
ToTable ("Comments", "dbo");
W jaki sposób korzystasz z frameworków encji? Czy korzystasz z płynnego mapowania, czy używasz pliku edmx? Czy korzystasz z odwrotnego scalania wbudowanego w projektanta? Jaka wersja struktury encji? Czy możesz opublikować zrzut ekranu odpowiednich części swojego modelu danych? –
Pokaż model, klasy POCO lub niestandardowy kontekst DbContext. –
Wygląda na to, że mogą być polami klucza obcego generowanymi przez kod. – jrummell