Varlık veritabanını mevcut bir veritabanıyla (ve bu nedenle veritabanı şemasının değiştirilmesi bir seçenek DEĞİLDİR) çalışan Entity çerçevesini almaya çalışıyoruz ve bir şeyleri test etmek için yarattığımız birim testleri bazı garip davranışlar gösteriyor. Dikkatinizi çektiği gibi, diğerleri gibi değil,Entity Framework: Bu sütunları nereden alıyorsunuz?
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]
son iki sütun istendi:
Bu
elimizdeki belirli bir nesne için tükürüyor SQL olduğunu. Çünkü aslında var olmadıkları ve Entity'nin onları neden talep ettiği hakkında hiçbir fikrimiz yok! Ne yapılandırma dosyalarımız ne de bizim POCO'larımız bunlardan hiç bahsetmiyor. Aslında, veritabanımız ilerledikçe, tamamen ayrı kavramlardır ve doğrudan hiçbir şekilde alakalı değildirler.Nereden bu sütunları oluyor ve bunu kesmek için bunu nasıl anlatır?
DÜZENLEME: Biz Entity Framework 4.2 kullanıyorsanız 1), aşağıda bazı sorulara cevap vermek. Akıcı haritalama kullanıyoruz.
2) POCO kendisi kısa olması açısından kesip eşitlik karmaşa ile, şuna benzer: Biz EDMX kullanmıyorsanız
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). Özel bir DbContext var. Çok ilginç olmayan çok fazla çizgi yok. Bağlam dosyası Biz db-ilk ile başladı
modelBuilder.Configurations.Add(new WhateverConfiguration())
ve
public IDbSet<WhateverPoco> PocoDatabaseTableAccessor { get; set; }
4) bir sürü Bunun ötesinde
Configuration.LazyLoadingEnabled = true;
Configuration.ProxyCreationEnabled = true;
, ama bu: Bu iki muhtemelen ilgilendiren işe yaramadı, bu yüzden şu anda ilk kod yapıyoruz.
5) Bu belirli POCO için config bağırsaklar geçerli:
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");
Öğe çerçevesini nasıl kullanıyorsunuz? Akıcı eşleme mi kullanıyorsunuz yoksa bir edmx dosyası mı kullanıyorsunuz? Tasarımcının içine yerleştirilmiş ters çevrimi mi kullanıyorsunuz? Varlık çerçevesinin hangi sürümü? Veri modelinizin ilgili bölümlerinin ekran görüntüsünü gönderir misiniz? –
Modeli, POCO sınıflarını veya özel DbContext'i gösterin. –
Kod ilk önce oluşturulmuş yabancı anahtar alanları gibi görünüyor. – jrummell