假设您的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 字段的外键/ b>,但正如您所见,它不是。此外,假设数据库模式 CAN NOT 被修改。
我希望使用以下类来使用Entity Framework
来表示这些表[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将生成的类的模型,但请记住,数据库中没有外键约束。
我认为关键问题是:如果您实际上没有外键,您将如何模拟外键?
请记住我无法触及数据库。
感谢。
答案 0 :(得分:0)
我以前做过这个:
1)获取数据库的副本
2)创建相关的外键
3)从您的副本
创建实体框架模型4)更改连接字符串以指回“实时”数据库。
一个很好的选择是使用reverse engineer code first来创建数据库的代码优先版本。然后,您可以在代码中手动添加关系。