我有一个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,我失去了它并且必须自己实现它.
我Entity Framework 4.1首先在代码中有一个简单的代码:
PasmISOContext db = new PasmISOContext();
var user = new User();
user.CreationDate = DateTime.Now;
user.LastActivityDate = DateTime.Now;
user.LastLoginDate = DateTime.Now;
db.Users.Add(user);
db.SaveChanges();
user.Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") };
db.SaveChanges();
db.Users.Add(new User() { Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") } });
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
问题是我收到了错误
保存不公开其关系的外键属性的实体时发生错误.EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源.通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常.有关详细信息,请参阅InnerException.
在
db.Users.Add(new User() { Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") } });
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我不明白为什么类似的操作有效.我的模型或ef-code-first首先出现了问题吗?
public class Avatar
{
[Key]
public int Id { …Run Code Online (Sandbox Code Playgroud) 我正在使用Entity Framework的Code First功能,我正在试图弄清楚如何指定在自动生成数据库时应该创建的列数据类型.
我有一个简单的模型:
public class Article
{
public int ArticleID { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Summary { get; set; }
public string SummaryHtml { get; set; }
public string Body { get; set; }
public string BodyHtml { get; set; }
public string Slug { get; set; }
public DateTime Published { get; set; }
public DateTime Updated { get; set; }
public virtual …Run Code Online (Sandbox Code Playgroud) c# entity-framework sql-server-ce data-annotations ef-code-first
如果这已经得到回答,请道歉,但如果您不使用IOC容器,如何保证每个请求有一个Entity Framework DbContext?(到目前为止,我遇到的答案涉及IOC容器解决方案.)
似乎大多数解决方案都挂钩到HttpContext.Current.Items字典中,但是如何在请求完成时保证处理DbContext?(或者EF的处理不是绝对必要的DbContext吗?)
编辑
我目前正在我的控制器中实例化和处理我的DbContext,但我在ActionFilters和我的MembershipProvider中也有几个单独的DbContext实例(我刚注意到,也有几个验证器).因此,我认为集中我的DbContext的实例化和存储以减少开销可能是个好主意.
asp.net-mvc entity-framework ef-code-first entity-framework-4.1 asp.net-mvc-3
该RC班没有连接到一个数据库,它是一个简单的类.班级只在一个地方而且不是偏袒的.Aérochem.Domaindll项目编译得很好.
注意:如果我在快速修复菜单中选择两个相同的命名空间之一,它什么都不做.
注2:这种情况发生在几个类中(一些与数据库相关,一些不相关)
是否有解决方法或找出错误的方法?

我首先使用VS 2012 MVC4代码构建Web应用程序.为了.mdf在更改模型后重新创建文件,我手动从VS中的app_data目录中删除了该文件.我之前做过几次没有任何问题.
现在我收到一个例外:
底层提供程序在Open上失败.==>无法将文件
MYDB.mdf作为数据库附加'MYDB'.
我将非常感谢您提供有关如何重新创建.mdf文件的帮助.
谢谢!
我有一个名为的表EducationTypes和一个名为Entity的实体EducationType,我重命名了一个实体属性,现在我经常得到它Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.我该如何解决这个问题?
生成的SQL脚本:
EXECUTE sp_rename @objname = N'dbo.EducationTypes.nvarchar', @newname = N'EducationTypeTitle', @objtype = N'COLUMN'
Run Code Online (Sandbox Code Playgroud) 在使用NuGet为SQL Server CE添加实体框架代码之后,为我生成了此代码.他们没有对任何其他文件进行任何更改.该文件SQLCEEntityFramework.cs已创建并放在App_Start文件夹中.
这是否意味着它会自动执行或者其他什么?当我为MVC 3添加Ninject时也发生了同样的事情.没有代码被添加到global.ascx文件中所以我不知道它的即插即用或者我必须配置一些东西.
[assembly: WebActivator.PreApplicationStartMethod(typeof(StackTorrents.WebUI.App_Start.SQLCEEntityFramework), "Start")]
Run Code Online (Sandbox Code Playgroud) 我收到错误"非静态方法需要一个目标." 当我运行以下查询时:
var allPartners = DbContext.User
.Include(u => u.Businesses)
.Where(u => u.Businesses.Any(x => x.Id == currentBusinessId))
.ToList();
Run Code Online (Sandbox Code Playgroud)
我的entites定义如下:
public class User : Entity
{
public virtual List<Business> Businesses { get; set; }
}
public class Business : Entity
{
public virtual List<User> Users { get; set; }
}
public class Entity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的上下文配置如下;
public class Context : DbContext, IDatabaseSession
{
public DbSet<Business> Business { get; set; }
public DbSet<User> User …Run Code Online (Sandbox Code Playgroud) 我正在使用Entity Framework 5和Code First方法.我需要从存储过程中读取返回值; 我已经在读取输出参数和发送输入参数,但我不知道如何读取返回值.
可能吗?
这是我用来调用存储过程的代码:
var outParam = new SqlParameter();
outParam.ParameterName = "@StatusLog";
outParam.SqlDbType = SqlDbType.NVarChar;
outParam.Size = 4000;
outParam.Direction = ParameterDirection.Output;
var code = new SqlParameter();
code.ParameterName = "@Code";
code.Direction = ParameterDirection.Input;
code.SqlDbType = SqlDbType.VarChar;
code.Size = 20;
code.Value = "123";
var data = _context.Database.SqlQuery<Item>("exec spItemData @Code, @StatusLog OUT", code, outParam);
var result = data.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud) c# stored-procedures return-value ef-code-first entity-framework-5
ef-code-first ×10
c# ×5
asp.net-mvc ×3
.net-4.5 ×1
code-first ×1
ninject ×1
resharper ×1
return-value ×1
sql ×1