私はVS2012を使用してC#で顧客に連絡を試みるのを追跡するWebアプリケーションを作成しています。私は接触試行タイプを保存する2つのrefテーブルと、試着結果を保存しています。これらは常に固定値なので、試行結果が保存されます。私が抱えている問題は、DBからApp_ContactAttemptを取得すると、接続されたRef_ContactOutcomeおよびRef_ContactTypeエンティティなしでApp_ContactAttemptエンティティを返すことになります。レイジーローディングを有効にし、コンテキストファイルでプロキシの作成を有効にして、すべてのrefテーブルのプロパティをvirtualに設定します。しかし、私は、データベースからApp_ContactAttemptを取得すると、refテーブルが添付されていません。誰でも私が何ができるか考えていますか?より多くの情報が必要な場合は、私はそれを提供することができます。Cant 'が関連するエンティティを読み込むためにEF6を取得する
UPDATE 右、私はこのようになりますApp_ContactAttempt、取得するためのサービスのセットアップがあります。
public App_ContactAttempt GetContactAttempt(int contactAttemptId)
{
using (var logger = new MethodLogger(contactAttemptId))
{
var contactAttempt = new App_ContactAttempt();
try
{
contactAttempt = _unitOfWork.ContactAttempts.Get(contactAttemptId);
}
catch (Exception e)
{
logger.LogException(e.InnerException);
}
return contactAttempt;
}
}
私はこのサービスを利用する場合、私はサービスを呼び出すときに、私はApp_ContactAttemptを取り戻すが、Ref_ContactTypeをRef_ContactOutcomeはnullです。しかし、私はそうのようなDBのコンテキストを使用して、コントローラ内からDBに呼び出すとき:
var db = new ParsDatabaseContext();
var contactAttemptTest1 = _clientService.GetContactAttempt(contactAttempt.ContactAttemptId);
var contactAttemptTest2 = db.App_ContactAttempt.Where(x => x.ContactAttemptId == contactAttempt.ContactAttemptId);
contactAttemptTest1はRef_ContactTypeとRef_ContactOutcome両方ともヌルを有するApp_ContactAttemptを返します。ただし、ContactAttemptTest2は、Ref_ContactTypeとRef_ContactOutcomeの両方が設定されたApp_ContactAttemptを返します。
をContext.cs:彼らはすべてで助ける場合ここでは2 は、コンテキストとクラスである
UPDATE ...これは私が手掛かりを持っていないので、私の問題を絞り込むことができますホープ
public partial class ParsDatabaseContext : DbContext { public ParsDatabaseContext() : base("name=ParsDatabaseContext") { this.Configuration.LazyLoadingEnabled = true; this.Configuration.ProxyCreationEnabled = true; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } public DbSet<App_Client> App_Client { get; set; } public DbSet<App_ContactAttempt> App_ContactAttempt { get; set; } public DbSet<Ref_ContactOutcome> Ref_ContactOutcome { get; set; } public DbSet<Ref_ContactType> Ref_ContactType { get; set; } public virtual ObjectResult<GetClient_Result> GetClient(Nullable<int> clientID) { var clientIDParameter = clientID.HasValue ? new ObjectParameter("ClientID", clientID) : new ObjectParameter("ClientID", typeof(int)); return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<GetClient_Result>("GetClient", clientIDParameter); } }
App_ContactAttempt.cs
public partial class App_ContactAttempt
{
public int ContactAttemptId { get; set; }
public int ClientId { get; set; }
public Nullable<System.DateTime> ContactDate { get; set; }
public Nullable<int> ContactType { get; set; }
public Nullable<int> ContactOutcome { get; set; }
public string Notes { get; set; }
public virtual Ref_ContactOutcome Ref_ContactOutcome { get; set; }
public virtual Ref_ContactType Ref_ContactType { get; set; }
}
Ref_ContactOutcome.cs
public partial class Ref_ContactOutcome
{
public Ref_ContactOutcome()
{
this.App_ContactAttempt = new HashSet<App_ContactAttempt>();
}
public int ContactOutcomeId { get; set; }
public string Description { get; set; }
public virtual ICollection<App_ContactAttempt> App_ContactAttempt { get; set; }
}
Ref_ContactType.cs
public partial class Ref_ContactType
{
public Ref_ContactType()
{
this.App_ContactAttempt = new HashSet<App_ContactAttempt>();
}
public int ContactTypeId { get; set; }
public string Description { get; set; }
public virtual ICollection<App_ContactAttempt> App_ContactAttempt { get; set; }
}
「参照テーブルがありません」 - どういう意味ですか?デバッグ中は、 'Ref_ContactOutcome'プロパティが表示され、nullまたは何ですか? –
リポジトリパターンに 'Include'拡張子を使用するか、遅延読み込みを有効にする必要があります。 – Igor
遅延ロードを機能させるには、*からエンティティをロードしたコンテキスト*が、ナビゲーションプロパティにアクセスするまでに利用可能(かつ、処理されていない)でなければなりません。非常に短いコンテキストで作業したい場合は、熱心な読み込み(例: 'Include')を使用してください。 – Jcl