0

まず、Ef 4.1コードを使用しています。EF 4.1のコードが最初に親オブジェクトと子オブジェクトを挿入する際に問題が発生する

私はfollwingエラーを取得し、私が間違っているのかわからないのです。彼らの関係のために外部キープロパティを公開していないエンティティを節約しながら

エラーが発生しました。 EntityEntriesプロパティは、単一のエンティティが例外のソースとして識別できないため、nullを返します。エンティティタイプに外部キーのプロパティを公開することで、保存時の例外処理を簡単に行うことができます。詳細については、InnerExceptionを参照してください。

内部例外:

無効な列名 'GrantApplicationIs'。 無効な列名 'GrantApplication_Id'です。

私は認可アプリケーションを持っており、データベースに保存するときに監査エントリを追加しようとしています。

ここ

は私の状況です:

public class HbfContext : DbContext 
{ 
    public DbSet<Bank> Banks { get; set; } 
    public DbSet<AccountType> AccountTypes { get; set; } 
    public DbSet<GrantApplication> GrantApplications { get; set; } 
    public DbSet<AuditEntry> AuditEntries { get; set; } 
} 

グラントApplicationクラス:

public class GrantApplication 
{ 
    public int Id { get; set; } 
    public string EmployeeNumber { get; set; } 
    public string Title { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public virtual ICollection<AuditEntry> AuditEntries { get; set; } 
} 

AuditEntryクラス:

public class AuditEntry 
{ 
    public int Id { get; set; } 
    public int OldValue { get; set; } 
    public int NewValue { get; set; } 
    public DateTime AuditDate { get; set; } 
    public string EmployeeNumber { get; set; } 
    public int GrantApplicationIs { get; set; } 
    public GrantApplication GrantApplication { get; set; } 
} 

これは、私は新しい補助金への新しい監査エントリを追加する方法ですアプリケーション:

public void Insert(GrantApplication grantApplication) 
{ 
    DateTime currentDateTime = DateTime.Now; 
    string submitterEmployeeNumber = "123456"; 

    grantApplication.SignatureDate = currentDateTime; 
    grantApplication.SubmitterEmployeeNumber = submitterEmployeeNumber; 

    // Add audit entry 
    grantApplication.AuditEntries = new List<AuditEntry>(); 
    grantApplication.AuditEntries.Add(new AuditEntry 
    { 
     NewValue = grantApplication.GrantApplicationStateId, 
     AuditDate = currentDateTime, 
     EmployeeNumber = submitterEmployeeNumber 
    }); 

    // Insert the new grant application 
    grantApplicationRepository.Insert(grantApplication); 
} 

UPDATE:

私のテーブル構造のようになります。

GrantApplicationsテーブル:

Id int 
EmployeeNumber varchar(6) 
Title varchar(10) 
FirstName varchar(50) 
LastName varchar(50) 

AuditEntriesがテーブル:

Id int 
GrantApplicationId int 
OldValue int 
NewValue int 
AuditDate datetime 
EmployeeNumber varchar(6) 

私は何見当がつかないGrantApplicationIsGrantApplication_Idであり、なぜ列名であるかを示します。何から?

+1

代わりに、この 'GrantApplicationIs'を' GrantApplicationId'にしてはいけませんか? –

+0

私はGrantApplicationIsが何であるか、どこから来ているのか分かりません。私はGrantApplicationテーブルにこの名前の列を持っていません。 –

+0

@Brendanはあなたのテーブルにはありません。 'AuditEntry'クラスには' GrantApplicationIs'というプロパティがあります。 – Eranga

答えて

0

私にとっては、これが問題の原因であるということになります。

public int GrantApplicationIs { get; set; } 

これはタイプミスですか?それはGrantApplicationIdでしょうか?とにかく効果は次のとおりです。

  • GrantApplicationIsGrantApplicationナビゲーションプロパティの外部キープロパティとして認識されていません。代わりに、通常のスカラープロパティです。 DB内にこのような名前の列がない場合は、最初の例外があります。無効な列名 'GrantApplicationIs'

  • EFはFKデータベース列のデフォルト名であるGrantApplication_Idを使用します。DB内にこのような名前の列がない場合、2番目の例外が発生します。無効な列名 'GrantApplication_Id'

ソリューション:

  • GrantApplicationIsが実際にあなたのFKのプロパティであることをEFを伝える(および作成するために、規則に従って(GrantApplicationId
  • をFKプロパティに名前を付けたり、データの注釈や流暢APIを適用するのどちらかDB内の適切な列)。
+0

私の更新を見てください。 –

+0

@Brendan:そうですね、あなたのテーブルはこのように見えます。問題は、 'AuditEntry'クラスのプロパティ名' GrantApplicationIs'がDBの列名 'GrantApplicationId'と一致しないことです。あなたはCode-Firstを使っていると言ったので、手でクラスを書いたのですよね?あなたは単にプロパティ名を 'GrantApplicationId'に変更できませんか?これは、両方の例外を修正する最も簡単な方法です。 – Slauma

+0

すべての問題を申し訳ありません。それは私の側からのタイプミスでした。 GrantApplicationIsはGrantApplicationIdであるはずです。 –

関連する問題