【问题标题】:Is this possible with Entity Framework?实体框架可以做到这一点吗?
【发布时间】:2013-03-15 17:44:00
【问题描述】:

假设您有一个 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 将是引用表 PersonpersonId 的外键/b>,但如您所见,不是。此外,假设数据库架构不能被修改。

我希望有以下类来使用实体框架来表示这些表

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

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

记住我不能触摸数据库。

谢谢。

【问题讨论】:

  • 你能在本地复制数据库吗?

标签: .net database entity-framework c#-4.0


【解决方案1】:

我以前做过:

1) 复制数据库

2) 创建相关外键

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

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

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

【讨论】:

  • 还有其他方法吗?也许我无法让数据库在本地运行。
  • 能否请您发布一些有关如何手动创建这种关系的代码?
  • Google for Entity Framework Code First。从这里开始codefirst.codeplex.com
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多