0

そのため、私が取り組んでいる監査テーブルにまだ行き詰まっています。

これらは私のモデルです:

public interface Audit {
 int AuditById {get;set;}
 DateTime AuditOn {get;set;}

 User AuditBy {get;set;}
}
User {
 Id {get;set;}
 Email {get;set;}
 Password {get;set;}
}
Profile : Audit {
 public int Id {get;set;}
 public string Name {get;set;}
 public int AuditById {get;set;}
 public DateTime AuditOn {get;set;}

 public User AuditBy {get;set;}
 public User User {get;set;}
}

これは、ユーザーに必要なプロファイルがあることを確認するために私の dbase コンテキストにありますが、プロファイルには必要なユーザーがありません。

Dbase: DbContext{
   modelbuilder.Entity<Profile>()
    .hasoptional(e => e.User)
    .withrequired(u => u.Profile);
}

私のシードでは、これが最初のユーザー/管理者に対して行うことです:

var admin = new User{
   Id = 1, 
   Email = 'email@email.com',
   Password = 'woop',
   Profile = new Profile {
           Name = 'admin name',
           AuditById = 1,
          AuditOne = DateTime.Now
   }
}

だから、私はこのエラーが発生しています:

「依存操作の有効な順序を決定できません。依存関係は、fk 制約、モデル要件、または生成された値の保存が原因で存在する可能性があります」

AuditById が原因で、保存時にまだ存在しない 1 になっていることを理解しています。これを回避する方法はありますか? または、ユーザー テーブルとプロファイル テーブルをモデル化する方法について何かアドバイスはありますか? ユーザーがいなくてもプロファイルが存在する必要があり、ユーザーはプロファイルなしでは存在できません。

助けてくれてありがとう!

4

1 に答える 1

0

最初にプロファイル レコードを作成してから、ユーザー レコードを作成するときに参照を追加してみてください。

dbContext.Profiles.Add(new Profile { Id = 1, ... });

var admin = new User{
   Id = 1, 
   Email = 'email@email.com',
   Password = 'woop',
   ProfileId = 1
   }
}

dbContext.Users.Add(admin);

dbContext.SaveChanges();

また、質問に含めたコードは疑似コードであると想定しています。そうでない場合は、おそらくいくつかの重要なもの (ナビゲーション プロパティなど) が欠落している可能性があります。おそらく以下が役立ちます。

class User 
{
    [Key]
    protected int Id { get; set; }

    [ForeignKey("Profile")]
    protected int ProfileId { get; set; }

    protected Profile Profile { get; set; }

    ...

}

class Profile
{
    [Key]
    protected int Id { get; set; }

    [ForeignKey("User")]
    protected int? UserId { get; set; }

    protected User User { get; set; }

    ...
}
于 2012-06-14T16:12:07.677 に答える