使用一个EF6模型(db first)和一个代码优先的解决方案

时间:2014-12-18 16:37:20

标签: c# entity-framework entity-framework-6

我有一个包含多个数据库的解决方案。 我们正在使用EF6。

我们有一个项目是EF6(代码优先),一个项目是EF6 DB。

var arkleModelDbFist = new Arkle.DAL.EF.ArkleEntities();
var CustomerOld= new Arkle.DAL.EF.Customer();
arkleModelDbFist.Customers.Add(CustomerOld); // Errors on this line
arkleModelDbFist.SaveChanges();


var arkleModelCodeFirst = new ArkleEfModel();
var customer= new customer_ef(); // note we have renamed this so it won't conflict, even though it is in seperate project
arkleModelCodeFirst.Customers.Add(customer);
arkleModelCodeFirst.SaveChanges();

我们收到以下错误。

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException未处理

Message =正在Code First模式中使用上下文,其中包含从EDMX文件生成的用于Database First或Model First开发的代码。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用Database First或Model First,请确保Entity Framework连接字符串包含在启动项目的app.config或web.config中。如果要创建自己的DbConnection,请确保它是EntityConnection而不是其他类型的DbConnection,并将其传递给采用DbConnection的基本DbContext构造函数之一。要了解有关Code First,Database First和Model First的更多信息,请参阅此处的实体框架文档:http://go.microsoft.com/fwlink/?LinkId=394715

堆栈跟踪:        在Arkle.DAL.EF.ArkleEntities.OnModelCreating(DbModelBuilder modelBuilder)

无论如何,在一个解决方案中,首先允许代码优先使用db吗?

1 个答案:

答案 0 :(得分:0)

好的,深究这一点。 基本上,如果您在两个上下文之间共享连接,则这不起作用。 但是,如果您使用不同的连接,则可以正常工作。

感谢Ben Robinson指出我正确的方向。