实体框架可以实现吗?

时间:2013-03-15 17:44:00

标签: .net database entity-framework c#-4.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 字段的外键/ 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将生成的类的模型,但请记住,数据库中没有外键约束。

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

请记住我无法触及数据库。

感谢。

1 个答案:

答案 0 :(得分:0)

我以前做过这个:

1)获取数据库的副本

2)创建相关的外键

3)从您的副本

创建实体框架模型

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

一个很好的选择是使用reverse engineer code first来创建数据库的代码优先版本。然后,您可以在代码中手动添加关系。