-1
public class Project
{
public int ProjectId { get; set; }
public string ProjName { get; set; }
public string Description { get; set; }
public virtual List<Developer> MyDevs { get; set; }
}
public class Developer
{
public string Name { get; set; }
public string Skills { get; set; }
public string Email { get; set; }
public virtual Project MyProj { get; set; }
}
//define relationship using fluent api, under AppDbContext
modelBuilder.Entity<Developer>()
.HasOne(d => d.MyProj)
.WithMany(p => p.MyDevs)
.HasForeignKey("ProjectForeignKey");
Add-migrationとupdate-databaseはエラーは発生しませんが、ProjectテーブルでmyDev列を見つけることができません。私は、開発者のテーブルでmyProjカラムを見つけることができません。どちらか一方だけがforeignkeyカラムです。
次のシードメソッドを実行すると、1つのプロジェクトと1つの開発者が期待どおりにデータベースに追加されます。
public static void Seed(IApplicationBuilder applicationBuilder)
{
AppDbContext context = applicationBuilder.ApplicationServices.GetRequiredService<AppDbContext>();
Project ProjA = new Project { ProjName = "handyApp", Description = "a dummy Project" };
context.Project.Add(projA);
Developer FirstDev = new Developer { UserName = "John Smith", Skills = "C#", Email = "[email protected]", MyProj = ProjA};
context.Developer.Add(FirstDev);
context.SaveChanges();
}
次のコードを実行すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というヒットが発生します。
Developer Dev = context.Devs.Find(1);
string name = Dev.MyProj.ProjName; //put a break point here, the dubugger tells me Dev.MyProj is null
私の関係定義が間違っていることを特定するのに助けてください。
*私は、関連するオブジェクト*を取得しようとしていますたびに - あなたはそれを行うコードを示しています。 –
関係*定義*はOKです。しかし、EFにナビゲーションプロパティを読み込む(読み込む)よう依頼する必要があります。 [関連データの読み込み](https://docs.microsoft.com/en-us/ef/core/querying/related-data)ドキュメントのトピックを参照してください。 –
@aaron、はい、それは正しいプロジェクトIDです –