Просто используйте свойство virtual Customer
в Person
.Не нужно указывать ссылку в Customer
.
Пожалуйста, найдите полный проект ниже
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
namespace StackOverflow
{
public class Context : DbContext
{
static Context()
{
Database.SetInitializer<Context>(null);
}
public DbSet<Person> People { get; set; }
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
public virtual Customer Customer { get; set; }
}
public class Customer
{
public int Id { get; set; }
public DateTime JoinDate { get; set; }
//[NotMapped]
//public virtual Person Person { get; set; }
}
class Program
{
static void Main(string[] args)
{
var context = new Context();
context.Database.Delete();
context.Database.Create();
var person = new Person { Name = "Mark", LastName = "Streisand" };
person.Customer = new Customer { JoinDate = DateTime.Now };
context.People.Add(person);
context.SaveChanges();
var p = context.People.Find(1);
var joinDate = p.Customer.JoinDate;
}
}
}
PS.На самом деле, я считаю, что ваш сценарий мог бы быть лучше спроектирован с Customer
, унаследованным абстрактным Person
классом.В этом случае вам не понадобится ссылка на Customer
в Person
, поскольку сам Customer
будет экземпляром Person
.Это позволит вам иметь несколько реализаций Person
, все они сопоставлены с различными таблицами.
Посмотрите на этот фрагмент
public abstract class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
//public virtual Customer Customer { get; set; }
}
[Table("Customers")]
public class Customer : Person
{
//public int Id { get; set; }
public DateTime JoinDate { get; set; }
}