假设您有一个 SQL Server 数据库 (TestDB),其中仅包含两个表,可以通过执行以下 Transact-SQL 创建:
CREATE TABLE Person(
personId INT PRIMARY KEY IDENTITY(1,1),
name VARCHAR(50)
)
CREATE TABLE House(
personId INT,
houseId INT,
builtDate DATETIME,
PRIMARY KEY(personId, houseId)
)
理想情况下,表House中的字段personId将是引用表Person中的字段personId的外键,但如您所见,它不是。此外,假设不能修改数据库模式。
我希望有以下类通过使用实体框架来表示这些表
[Table("Person")]
public class Person
{
[Column("personId")]
public int Id{ get; set; }
[Column("name")]
public string Name{ get; set; }
public List<House> Houses{ get; set; }
}
[Table("House")]
public class House
{
[Column("personId")]
public int OwnerId { get; set; }
[ForeignKey("OwnerId")]
public Person Owner { get; set; }
[Column("houseId")]
public int HouseId{ get; set; }
[Column("builtDate")]
public DateTime BuiltDate{ get; set; }
}
public class EFDbContext : DbContext
{
public DbSet<Person> Persons {get; set;}
public DbSet<House> Houses {get; set;}
}
我认为如果 Person(personId) 和 House(personId) 在数据库中存在关系,这将是 Entity Framework 将生成的类模型,但请记住数据库中没有外键约束。
我认为关键问题是:当您实际上没有外键时,您将如何模拟拥有外键?
记住我不能触摸数据库。
谢谢。