实体框架4.1Code首先连接到Sql Server 2005

Chr*_*ent 6 entity-framework ef-code-first entity-framework-4.1

我正在尝试将Entity Framework 4.1 RC与SQL Server 2005实例一起使用.我创建了一个空数据库,我想将我的POCO对象保存到它.我的POCO看起来像:

public class Cart
{
    public Cart()
    {
        this.CartId = Guid.NewGuid();

    }

    public Guid CartId { get; set; }
    public decimal TotalCost { get; set; }
    public decimal SubTotalCost { get; set; }
    public decimal Tax { get; set; }
    public decimal EstimatedShippingCost { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的CartContext是:

public class CartContext : DbContext
{
    public DbSet<Cart> Carts { get; set; }
    public DbSet<Attribute> Attributes { get; set; }
    public DbSet<AttributeItem> AttributeItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个连接字符串:

<add name="CartContext" connectionString="Server=myserver.mynetwork.net;User ID=MyUser;Pwd=mypassword;Initial Catalog=ExistingDb" providerName="System.Data.SqlClient" \>
Run Code Online (Sandbox Code Playgroud)

当我尝试将对象添加到上下文并保存它时,我得到:

System.Data.Entity.Infrastructure.DbUpdateException:更新条目时发生错误.有关详细信息,请参阅内部异常 ---> System.Data.UpdateException:更新条目时发生错误.有关详细信息,请参阅内部异常 ---> System.Data.SqlClient.SqlException:无效的对象名称'dbo.Carts'.

如果我对数据库进行了配置,我可以看到用户连接,在sys.tables中查找数据库运行此查询:

SELECT TOP (1) 
[Extent1].[Id] AS [Id], 
[Extent1].[ModelHash] AS [ModelHash]
FROM [dbo].[EdmMetadata] AS [Extent1]
ORDER BY [Extent1].[Id] DESC 
Run Code Online (Sandbox Code Playgroud)

然后尝试插入我的购物车对象.它永远不会尝试创建Carts表.我猜测连接字符串有问题,但我无法找到有关如何执行此操作的示例.

Lad*_*nka 8

DbContext不会因为它不存在而创建表.使用现有数据库后,还必须手动创建表或创建自定义初始化程序.默认初始值设定项只能删除数据库并创建包含所有必需表的新数据库.

你可以打电话:

context.Database.Delete();
context.Database.Create();
Run Code Online (Sandbox Code Playgroud)

要么:

context.Database.CreateIfNotExists();
Run Code Online (Sandbox Code Playgroud)

要么:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());
// You don't need to call this. Initialization takes place anyway if context 
// needs it but you can enforce initialization for example in the application 
// startup instead of before the first database operation
context.Database.Initialize(true); 
Run Code Online (Sandbox Code Playgroud)