问题标签 [code-first]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
676 浏览

entity-framework-4 - EF CTP4 - 创建表,但不删除数据库

我有一个托管的 SQL Server 数据库,但我无权删除它。如何让 EF 从我的域类创建表?RecreateDatabaseIfModelChanges 和 AlwaysRecreateDatabase 尝试删除数据库,CreateDatabaseOnlyIfNotExists 不会创建表。

谢谢

0 投票
2 回答
2440 浏览

.net - EF4 代码优先:定义对象关系、外键

< RANT_MODE >

EF 代码优先方法旨在节省大量时间,但目前我只看到玩具示例并花费数小时试图了解如何使其生成我想要的数据库。但仍然希望尤里卡时刻:-)

< RANT_MODE />

关于问题!

虚拟与具体属性

我试图了解 EF 如何映射和检索对象关系。我应该什么时候标记一个属性virtual,什么时候不?(如在public Person Owner { get; set; }vs.中public virtual Person Owner { get; set; }。)在我见过的数十个代码优先示例中,他们似乎可以互换使用这些示例,但没有太多解释。我所知道的是导航属性 ( public virtual ICollection<Person> Owners { get; set; }) 必须是virtual为了使延迟加载成为可能(正确..?),但这在非收藏品世界中如何应用?

对象关系和外键

public int OwnerId { get; set; }除了我感兴趣的“主要”属性()之外,我找不到任何关于是否应该包含外键字段( )的信息public Person Owner { get; set; }。我尝试不这样做,并且 EF 友好地自动添加了一个 int 列Owner_Id在我的表中命名,似乎理解我想要实现的目标。

Code First 的约定(“外键”部分)中,EF 团队提到“在关系的依赖端包含外键属性是很常见的”,并且“Code First 现在会推断出任何名为 '' (即 OwnerId)[...] 具有与主键相同的数据类型,表示关系的外键”。IE。如果我有两个 EF 就会知道它们是相关的。

但是,除了“外来对象”本身之外,明确指定持有 FK 的此类属性是否被认为是一种好的做法?

外来对象、外键 - 续

正如我上面提到的,即使我只有public Person Owner { get; set; }在我的对象中(比如Event),该表Events也会包含一个Owner_Id由 EF 自动添加的列。更重要的是,检索后我将可以访问Owner.

但是,请考虑以下情况。我有两个课程:

我希望它们与 TPT 相关。这意味着手动映射:

您可能会注意到,我试图重新创建 EF 对我的Owner_Id专栏所做的事情。然而在检索时,myAccountInstanceFromDb.Owner为空。这是为什么?我如何告诉 EF 它应该发挥它的魔力并填充我的Owner财产?

指针,指针

如果您能澄清上述内容,我将不胜感激 - 达到了真正希望知道答案的地步,但无法阅读另一篇文章,该文章仅展示了另一个玩具示例,说明使用 EF 是多么容易。也就是说,如果您确实对 EF 的大脑有深入的最新参考,请也发布链接。

提前感谢您的宝贵时间!

0 投票
1 回答
2157 浏览

linq - 代码优先方法错误:LINQ to Entities 不支持指定的类型成员“xxxxx”

为了进一步抽象我的存储库层,我尝试遵循此处描述的代码优先方法:http: //msdn.microsoft.com/en-us/magazine/ee236639.aspx

我在 Account 和 Subscription 实体之间存在多对多关系。Navigation 属性存在于指向另一个实体的每个实体上(例如 Account.Subscriptions)。

在我创建自己的模型之前,我使用的是实体生成的模型,下面的工作正常(“db”是实体上下文):

现在 Account 的模型如下所示:

当我现在尝试运行相同的 LINQ 查询时,我收到了这个错误:

“LINQ to Entities 不支持指定的类型成员‘订阅’。仅支持初始化程序、实体成员和实体导航属性。”

任何建议都非常感谢。

0 投票
7 回答
17421 浏览

c# - EF4 代码优先导致 InvalidOperationException

每次构建时尝试运行我的项目时遇到问题。初始化程序似乎在运行,但是当涉及到第一个查询时 - 它会随着以下InvalidOperationException.

作为参考,我使用的是直接使用 NuGet 导入的 EF Code First CTP4。连接到 SQL Server 2008 R2

如果有任何模型修改,我想要重新创建数据库,并为查找表添加一些值。这两件事似乎都得到了开箱即用的支持*。

我的设置是这样的:

全球.asax

核心数据库.cs

当它运行时,它会死在与此类似的行上,这基本上是它在创建数据库后遇到的第一个查询。

我认为不是的事情:

  • 这不是权限:我已经删除了 SQL Server 中的实际数据库本身。应用程序大约在尝试运行该查询的同时重新创建它(初始化程序已设置,然后显然它会推迟创建直到需要它)。我还以我的 Web.config 中指定的用户身份登录到 SQL Server,并且他们对数据库具有完全的读/写访问权限。事实上,他们可能应该这样做,因为该帐户也创建了数据库。
  • 正在创建数据库:删除数据库并自动重新创建。
  • 连接字符串已正确定义,包括providerName属性。

<add name="CoreDB" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=TheDatabase;User Id=TheUsername;Password=ThePassword;" providerName="System.Data.SqlClient" />

  • 这似乎不是我的代码/逻辑中的错误,因为一旦查询成功失败,代码将正常启动,直到下一次重建应用程序。这显然是可能的,而且无论如何我可能都必须在我的代码中应用解决方法。:)

该怎么办?

理想情况下,我想“不要考虑数据库模式”。我希望它看起来像Scott Gu 的优秀博客文章(以及使用现有数据库的后续工作)中的那样,事情刚刚解决并消失了。在大多数情况下,这是真的。这似乎是连接在某些时候没有关闭的问题,但我不知道如何解决这个问题。

一些论坛/ SO帖子确实暗示我遇到的问题基本上是因为初始化程序没有完全按计划工作并且连接可能保持打开状态。其他地方的解决方案似乎只是“不要创建自己的初始化程序”,这不是最好的解决方案 - 但除非有人有任何想法,否则我可能不得不在 CTP5 之前这样做。

*是的,我知道这是一个 CTP,所以“支持”可能不是这个词 :)

0 投票
1 回答
1506 浏览

entity-framework - EF4 Code-First:在建立关联时在模型中包含或不包含外键

在一些 Code-First EF4 演练中,您在定义 POCO 时会看到这样的模式:

为什么 Product 应该同时具有制造商 ID 和对制造商的引用?它与延迟加载有关吗?

0 投票
1 回答
1231 浏览

entity-framework-4 - 如果 EF4 代码第一个数据库初始化程序中的模型发生更改,如何删除表?

我有一个模块化架构,其中一些表取决于是否安装了模块。在实体框架 CTP4 中,如何使用在模型更改时删除并重新创建表(而不是整个数据库)的数据库初始化策略?

0 投票
1 回答
708 浏览

entity-framework-4 - EF4 和 Code-First:为什么 DDD 人喜欢它?

实体框架女王认为EF4 Code-First 对 DDD 人来说确实很有吸引力。这种说法也出现在许多其他地方。

我的问题是:为什么 Code-First 比 Model-First 更有吸引力?我会认为后者更符合 DDD 的工作方式?

0 投票
1 回答
192 浏览

entity-framework-4 - 代码优先:如何在源类/表也是目标的情况下创建多对多关系?

有人可以发布一个示例,说明如何使用代码优先创建源类也是目标类的多对多关系吗?

就像是:

玩具 * <-----> * 玩具

谢谢你。

努诺·塞尼卡

0 投票
1 回答
3259 浏览

transactions - EF4 代码优先、TDD、CRUD 和事务

过去,我在创建如下所示的数据访问/存储库代码时为简单的 CRUD 操作编写了单元测试:

今天我在搞乱 EF4 Code First,我意识到我不知道这个测试场景是如何在实体框架词典中翻译的。似乎,如果我调用DbContext.SaveChanges(),它会保存提交,无论是否AcceptAllChanges()被调用。即使使用ObjectContext而不是DbContext,我也无法弄清楚如何在不手动清理创建的任何模拟/测试对象的情况下重新创建这个简单的测试场景。我确实在 MSDN 上阅读了这篇文章,但TransactionScope也没有真正的Rollback类型方法。我是否使用TransactionScope并且从不打电话Complete? 是否有另一种方法或方式使用 DbContext 和/或 ObjectContext 以便在单元测试期间回滚?我是否需要使用 EF4 Code First 完全重新调整我对 TDD 的思考?

0 投票
1 回答
3463 浏览

.net - 如何在与 EF CTP5 Fluent API 的一对多关系中关闭级联删除

在 Fluent NHibernate 中,您可以设置映射的级联设置,例如

这是如何在实体框架“代码优先”中完成的?