我正在 MVC3 Web 应用程序中使用 Entity Framework 4.1。我的任务是重写一个遗留应用程序,其中包含大约 200 多个表的数据库,并且数据已经就位,因此采用 EF 的数据库优先方法。
我知道为整个应用程序创建一个巨大的 edmx 模型是一种不好的做法,但经过几个小时的研究,我无法获得如何前进的明确方向,因为我不知道如何重用公用表在不止一种模型中。但我想将我的模型分解为更小的、易于管理的环境。
当我在两个模型中放置一个公用表(例如 Users)时,该项目会抛出以下形式的编译错误:
类型“Project.Models.EntityX”已包含“EntityX_PropertyY”的定义
我发现的最接近解决方法是在这里:http://connect.microsoft.com/VisualStudio/feedback/details/366721/entity-framework-the-type-xxx-already-contains-a-definition-for- X
Microsoft 发布于 2008 年 9 月 17 日下午 5:18
这个问题是设计使然的。解决方法是将模型放在不同的文件夹中(对于 C# 和 ASP.NET 项目),或者设置自定义工具命名空间(对于 C# 和 VB 项目)。
这是08年的事了。我无法使用任何一个选项,我想知道是否有更好的方法来构建项目,以便我能够在多个模型中使用同一个表?
c# asp.net-mvc entity-framework-4.1 asp.net-mvc-3 ef-database-first
我们的解决方案目前基于 Entity Framework Database First。我们有一个从 EDMX 生成存储库类的 T4 模板。
我们正在审查发布更改的计划方法,尤其是数据库更改。如果我们先继续Database,那么我们需要单独生成脚本来改变开发和其他数据库。
似乎使用 Code First,我们只需更改模型并生成脚本来更改各种数据库。这看起来更直接,不涉及手工编写脚本过程和更低的风险。
因此,如果我们进行切换,是否只是以下情况:
最后,我们将如何看待模型之间的关系?有没有办法创建图表?
谢谢,
克里斯
t4 entity-framework visual-studio ef-code-first ef-database-first
我在我的应用程序中使用EntityFramwok(代码优先),但由于某种原因,我必须将entityframwork方法更改为数据库优先。我已经在本地成功配置了该项目,当将代码发布到微软azure服务器并尝试登录我的应用程序时,它抛出一个异常:“”The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development. This will not work correctly. To fix this problem do not remove the line of code that throws this exception. If you wish to use Database First or Model First, then make sure that the Entity Framework connection string is included in the app.config or web.config of the start-up project. If you are …
我正在开发一个 ASP.NET MVC4 应用程序(数据库优先方法),现在我从数据库更新了模型,然后我收到了这个错误:
从第 1106 行开始映射片段的问题:表 Trn_BenchProficiency 的键 (Trn_BenchProficiency.BenchNumber) 的潜在运行时冲突:列 (Trn_BenchProficiency.BenchNumber) 被映射到 EntitySet Trn_BenchProficiency 的属性 (Trn_BenchProficiency),但它们不构成 BenchProficiency 的概念侧实体集。关键属性(Trn_BenchProficiency.AssessedDate、Trn_BenchProficiency.BenchNumber、Trn_BenchProficiency.Proficiency、Trn_BenchProficiency.SkillAllignmentID、Trn_BenchProficiency.SkillID)。
当我双击错误visual studio时显示:

请帮助我,这是什么问题?我真的找不到错误。
asp.net-mvc entity-framework database-first ef-database-first asp.net-mvc-4
我们需要将现有项目从数据库优先迁移到代码优先。每个环境(DEV、TEST、PROD)的数据库版本略有不同。差异在于 DEV 中的更改可能尚未推送到 TEST 和 PROD。
--
我们使用实体框架 6.1.3。
我们有一个部署数据库的数据库项目。发布操作将数据库与项目进行比较,并构建脚本以根据需要更改数据库。我们有一个带有 edmx 图的模型项目。我们从数据库更新 edmx,这会根据数据库中的表生成实体。
我们正在用代码优先项目替换模型项目(带有 edmx)。数据库项目将消失,我们新的代码优先项目将进行迁移。
--
我们使用 EF PowerTools 对数据库进行逆向工程并创建模型。然后我们创建一个迁移并添加创建数据库所需的语句。但是,当我们更新数据库时,它会崩溃,因为表已经存在。接下来,我们创建了一个忽略更改的迁移。现在 update-database 什么也不做。这很好,因为一切都已经存在。但是如果我需要部署到新的空数据库会发生什么?它不会创建任何这些对象。
让事情变得复杂的是,从 DEV 中的逆向工程中提取的一些对象不在 TEST 中。并且 TEST 中的某些表可能在 DEV 中发生了更改。那么 PROD 也可能会有所不同。
--
我们怎样才能从数据库优先过渡到代码优先,同时仍然拥有一个适用于所有环境并可以构建独立数据库的可靠流程?
entity-framework ef-code-first ef-database-first entity-framework-6 entity-framework-migrations
在我的数据库中,我通过对外键表设置唯一约束来强制执行一对一关系。这被 Sql Server Management Studio 正确识别为一对一关系:
我的问题是 EF6 没有将其识别为一对一关系并在 Person 类上生成一个 Collection:
如果 t4 模板中的 itemCollection 包含唯一键信息,那么当表上有唯一键时,我可以轻松修改 T4 模板以不生成集合。但它们只包含外键信息。我猜这是因为 edmgen 工具没有从数据库中提取这些信息。
有没有办法强制该工具包含数据库中的所有约束,以便我可以在 t4 模板中使用此信息?
作为 EF 迁移的新手,我对以下行为感到惊讶,并想知道它是否是故意的(即有一个开关可以让它消失)。
当我重命名列时,EntityTypeConfiguration 类中有以下相关行:
Property(x => x.MyColumn).HasColumnName(@"MyColumn").HasColumnType("nvarchar").IsOptional();
Run Code Online (Sandbox Code Playgroud)
而且,至关重要的是:
HasOptional(a => a.RelatedTable).WithMany(b => b.ThisTable).HasForeignKey(c => c.MyColumn).WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)
据我了解,这是建立外键关系。当我将 MyColumn 重命名为 MyColumn2 时,创建的迁移如下所示:
public override void Up()
{
RenameColumn(table: "dbo.ThisTable", name: "MyColumn", newName: "MyColumn2");
RenameIndex(table: "dbo.ThisTable", name: "IX_MyColumn", newName: "IX_MyColumn2");
}
Run Code Online (Sandbox Code Playgroud)
但是,MyColumn未在 上建立索引ThisTable。我意识到为外键关系创建索引是明智的;这就是 EF 假设有一个的原因吗?
请注意,EF 模型最初是使用 EF 反向 POCO 生成器从数据库生成的。
c# entity-framework ef-database-first entity-framework-migrations
我首先生成实体框架数据库(来自数据库的 EF 设计器)。我在 Microsoft SQL Server 中有两个表:
CREATE TABLE dbo.Person
(
Pk_Person_Id INT IDENTITY PRIMARY KEY,
Name VARCHAR(255),
EmailId VARCHAR(255),
);
CREATE TABLE dbo.PassportDetails
(
Pk_Passport_Id INT PRIMARY KEY,
Passport_Number VARCHAR(255),
Fk_Person_Id INT UNIQUE
FOREIGN KEY REFERENCES dbo.Person(Pk_Person_Id)
);
INSERT INTO dbo.Person
VALUES ('Niraj','v.a@emails.com'),
('Vishwanath','v.v@emails.com'),
('Chetan','c.v@emails.com');
GO
INSERT INTO dbo.PassportDetails
VALUES (101, 'C3031R33', 1), (102, 'VRDK5695', 2), (103, 'A4DEK33D', 3);
GO
SELECT * FROM dbo.Person
SELECT * FROM dbo.PassportDetails;
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 中,关系显示为一对一,因为Fk_Person_Id设置为isUnique = true …
语境:
我使用数据库优先方法通过 Entity Framework Core 和脚手架生成实体。每次我更改数据库中的某些内容时,我都会使用-f参数运行脚手架来重写生成的实体。到目前为止,一切都很好。在我的数据库模式中,我有一些查找表,它们用作其他表的枚举,并且这些其他表上有外键。
问题:
我想从这些查找表生成枚举,我可以在代码中使用它们。这些枚举应由查找表中的数据(Id、Value)填充。这样的事情有可能吗?
我发现人们可以忽略实体生成中的那些表,并使用value-conversions链接它们自己的枚举。但这真的是唯一的出路吗?
我的数据库架构示例:
桌子:Category
| ID | 价值 |
|---|---|
| 0 | 有氧运动 |
| 1 | 力量 |
| 2 | 肥大 |
桌子:Exercise
| ID | 姓名 | 类别 |
|---|---|---|
| 0 | 硬拉 | 1 |
| 1 | 卧推 | 1 |
| 2 | 跑步 | 0 |
所以从表中Category我想生成简单的枚举:
public enum Category {
Cardio = 0,
Strength = 1,
Hyperthrophy = 2
}
Run Code Online (Sandbox Code Playgroud)
然后我希望它在实体中使用,Exercise例如:
public partial class Exercise {
public Exercise() {
}
public int Id { get; set; }
public string Name { get; set; …Run Code Online (Sandbox Code Playgroud) c# enums scaffolding ef-database-first entity-framework-core
我有一个现有的SQLite数据库,我想在Entity Framework中使用它.然而,SQLite奇怪的类型系统意味着你甚至可以
create table temp(temp datetime);
insert into temp values ('whatever');
Run Code Online (Sandbox Code Playgroud)
日期存储为Unix时间整数.我的模型类是由Visual Studio自动生成的,那么如何告诉代码生成器正确处理这些日期而不是让应用程序抛出
字符串未被识别为有效的DateTime.
启动时的异常?
c# ×5
asp.net-mvc ×2
entity-framework-migrations ×2
azure ×1
code-first ×1
datetime ×1
edmx ×1
enums ×1
scaffolding ×1
sql-server ×1
sqlite ×1
t4 ×1