我有一个MVC3和EF 4 Code First应用程序,它被配置为在模型更改时通过将DB Initializer设置为a来更改数据库DropCreateDatabaseIfModelChanges<TocratesDb>,其中TocratesDb是我的派生DbContext.
我现在通过向类添加属性对模型进行了更改,但是当EF尝试删除并重新创建数据库时,我收到以下错误:
Cannot drop database "Tocrates" because it is currently in use.
Run Code Online (Sandbox Code Playgroud)
我绝对没有在这个数据库上打开任何其他连接.我假设我的cDbContext仍然与数据库有一个开放的连接,但我该怎么办呢?
新:现在我的问题是如何根据模型重新创建数据库.通过使用更通用的IDatabaseInitializer,我失去了它并且必须自己实现它.
我的项目中有多个课程(包括TPT).每个POCO具有BaseClass,其中有一个GUID(称为GlobalKey)作为主键.
首先我用来DataAnnotations创建正确的外键.但是,我在将对应的GUID与对象本身同步时遇到了问题.
现在我想只有一个虚拟导航属性,以便创建数据库中的GUID字段NamingConvention.但是字段名称总是添加一个下划线,后跟单词GlobalKey(右边).当我想删除下划线时,我不想通过流畅的API通过我的所有POCO来执行此操作:
// Remove underscore from Navigation-Field
modelBuilder.Entity<Person>()
.HasOptional(x => x.Address)
.WithMany()
.Map(a => a.MapKey("AddressGlobalKey"));
Run Code Online (Sandbox Code Playgroud)
是否有任何想法通过覆盖惯例为所有POCOS做到这一点?
提前致谢.
安德烈亚斯
entity-framework naming-conventions code-first entity-framework-6
我想这样做:
ALTER TABLE CompanyTransactions DROP COLUMN Created
Run Code Online (Sandbox Code Playgroud)
但我明白了:
Msg 5074,Level 16,State 1,Line 2对象'DF__CompanyTr__Creat__0CDAE408'依赖于'Created'列.消息4922,级别16,状态9,行2 ALTER TABLE DROP COLUMN创建失败,因为一个或多个对象访问此列.
这是代码第一表.不知怎的,迁移已经变得混乱,我试图手动回滚一些变化.
我不知道这是什么:
DF__CompanyTr__Creat__0CDAE408
Run Code Online (Sandbox Code Playgroud) 实体框架4.1 Code First非常适合创建表和关系.是否可以使用Code first方法创建sql视图或存储过程?任何关于此的指示都将受到高度赞赏.非常感谢!
我创建了一个新的Entity Frameworks Code First应用程序,DbSet(People)返回null.
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Repository : DbContext
{
public DbSet<Person> People;
}
Run Code Online (Sandbox Code Playgroud)
web.config:连接字符串
<connectionStrings>
<add name="Repository"
connectionString="Data Source=|DataDirectory|Repository.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
现在我打电话的时候
Repository _repo = new Repository()
_repo.People;
Run Code Online (Sandbox Code Playgroud)
_repo.People 将为null
我错过了什么?
我似乎无法完成这项工作
class Member
{
public virtual IList<Member> Friends { get; set; }
[Key]
public int MemberId { get; set; }
public string Name{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试添加Mappings但是徒劳无功.有没有办法用CTP5这样做?
在使用EF代码时,我会在不同时间收到以下错误:
实体类型SomeType不是当前上下文的模型的一部分.
导致此错误的可能原因是什么?
我有一个使用EF代码优先的asp.net MVC3项目.对于我的单元测试,我一直在使用SQL Server CE 4.0和SQL Server 2008 Express.两者都与EF一起完美地生成了我的数据库.
但是,当我在单元测试之外运行我的应用程序并将其指向我的连接字符串时,我得到了错误
ProviderIncompatibleException:提供程序未返回ProviderManifestToken字符串
我已经阅读了关于此的MS文档,看起来这是SqlVersionEF模型生成的标记.问题是我使用代码第一种方法,所以我没有.edmx文件,也不知道在哪里指向我的元数据信息,因为还没有生成数据库.
我知道我的连接字符串,因为db name,username和pass是正确的,因为将它们更改为错误的值会引发预期的错误.不知道从哪里开始.
谢谢.
这是我的连接字符串:
<connectionStrings>
<add
name="SqlConnection"
providerName="System.Data.SqlClient"
connectionString="Data Source=WORKSTATION\SQLEXPRESS;Initial Catalog=CodeFirst;Integrated Security=False;
Persist Security Info=False;User ID=CodeFirst_user;Password=password1;Connect Timeout=120;MultipleActiveResultSets=True;"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud) 开始在包管理器控制台中使用add-migration命令为我的模型生成迁移.我的问题是,上下方法.我假设down方法的目的是删除所有依赖项并删除表,如果它们已经在数据库中?还有up方法会在up方法之前执行吗?那么up方法是反向的,创建/更新表/索引等?
有时当我使用它时,down方法会获得许多创建表,然后被删除?最近它创建并删除了很多表,并且在up方法中几乎发生了同样的事情.为什么?
我有两个问题:
1)如何在没有更新数据库模型的情况下从包管理器控制台运行Seed()方法?
2)有没有办法在代码中调用Seed()方法?
感谢任何建议.