0

假设您有一个 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 将生成的类模型,但请记住数据库中没有外键约束。

我认为关键问题是:当您实际上没有外键时,您将如何模拟拥有外键?

记住我不能触摸数据库。

谢谢。

4

1 回答 1

0

我以前做过这个:

1)获取数据库的副本

2)创建相关外键

3) 从您的副本创建实体框架模型

4) 更改连接字符串以指向“实时”数据库。

一个不错的选择是首先使用逆向工程代码来创建数据库的代码优先版本。然后您可以在代码中手动添加关系。

于 2013-03-15T17:53:56.030 回答