我正在使用.Net4.5在VS2012中创建一个控制台项目.之后我将"添加","新项目"添加到项目中,然后选择"EF 5.x DbContext Generator".然后,几秒钟后,"错误列表"选项卡中会显示以下错误消息:
错误1运行转换:请使用您要生成的.edmx文件的实际名称覆盖替换标记'$ edmxInputFile $'.C:\项目\测试\ ConsoleAppEF5\ConsoleAppEF5\Model1.tt`
我怎样才能解决这个问题 ?
我错过了什么?
又如何在Code First中创建多个标识列?
由于群集性能,常见的建议是使用自动增量整数列而不是使用创建的GUID newid().
要将列声明为自动增量,必须使用注释指定它[DatabaseGenerated(DatabaseGeneratedOption.Identity)].
但是,您只能在表格中拥有一个身份.
所以从基础模型开始,如:
public abstract class ModelBase {
// the primary key
public virtual Guid Id { get; set; }
// a unique autoincrementing key
public virtual int ClusterId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我们如何设置它以便:
ClusterId 是自动增量的仅供参考,如果你想在代码中自动生成它,你可以跳过Id字段上的注释并执行以下操作:
public abstract class AbstractContext : DbContext {
/// <summary>
/// Custom processing when saving entities in changetracker
/// </summary>
/// <returns></returns>
public override int …Run Code Online (Sandbox Code Playgroud) entity-framework ef-code-first ef-migrations entity-framework-5
我是EF5 Code First的新手,在开始工作项目之前,我正在修改概念验证.
我最初创建了一个看起来像的模型
public class Person {
public int Id { get; set; }
public string FirstName { get; set;}
public string Surname {get;set;}
public string Location {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我添加了一些记录,使用了一个我坚持在顶部的MVC应用程序.
现在我想将Location列更改为枚举,如:
public class Person {
public int Id { get; set; }
public string FirstName { get; set;}
public string Surname {get;set;}
public Locations Location {get;set;}
}
public enum Locations {
London = 1,
Edinburgh = 2,
Cardiff = 3
}
Run Code Online (Sandbox Code Playgroud)
当我添加新的迁移时,我得到:
AlterColumn("dbo.People", "Location", c => c.Int(nullable: false));
Run Code Online (Sandbox Code Playgroud)
但是当我运行update-database时出现错误 …
我想尝试以下工作:
_dbmsParentSections = FactoryTools.Factory.PdfSections
.Include(x => x.Children.OrderBy(y => y.Order).ToList())
.Include(x => x.Hint).Include(x => x.Fields)
.Where(x => x.FormId == FormId && x.Parent == null)
.OrderBy(o => o.Order)
.ToList();
Run Code Online (Sandbox Code Playgroud)
导致异常的部分是:
.Include(x => x.Children.OrderBy(y => y.Order).ToList())
Run Code Online (Sandbox Code Playgroud)
编辑:
经过进一步观察,
_dbmsParentSections.ForEach(x => x.Children = x.Children.OrderBy(y => y.Order).ToList());
Run Code Online (Sandbox Code Playgroud)
为我完成了这项工作(在初次Factory通话之后没有Children.OrderBy).
我将EF 5.0安装到.DAL中,现在我想从Nuget将EF 5.0安装到.BLL中
但是默认的在线Nuget软件包总是会出现6.0,这与我在DAL中使用的5.0 EF一起使用时会出错.
我在哪里可以将5.0版本的EntityFramework安装到我的Nuget包中?
我将这个Entity类与Entity Framework 5 Code First一起使用:
public class Survey
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string SurveyName { get; set; }
[Required]
public int ClientID { get; set; }
[ForeignKey("ClientID")]
public virtual Client Client { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的Controller的Create方法中,我这样做:
Survey entity = new Survey()
{
SurveyName = "Test Name",
ClientID = 4
};
db.Surveys.Add(entity);
db.SaveChanges();
Client c1 = entity.Client; //Why is this null?
Client c2 = db.Clients.Find(entity.ClientID); //But this isn't?
string s2 = c2.ClientName;
string s1 …Run Code Online (Sandbox Code Playgroud) 好吧,我想重新创建一个我使用EF 4.1到EF 5.0创建的项目,这个项目很简单,或者至少我认为.我的旧项目中的一件事是我能够在运行时在EF 4.1中更改数据库连接字符串:
using (var myContext = new MyEntities(ConnectionString))
{
}
Run Code Online (Sandbox Code Playgroud)
轻松但在EF 5.0中你必须以不同的方式做到这一点:
string connectionString = "data source=LocalHost;initial catalog=MyDatabase;user id=MyUserName;password=MyPassword;multipleactiveresultsets=True;App=EntityFramework";
using (var myContext = new MyEntities())
{
myContext.Database.Connection.ConnectionString = connectionString;
}
Run Code Online (Sandbox Code Playgroud)
现在,这花了我两个小时的时间来弄清楚,所以我想我的问题是这是在运行时更改连接字符串的正确方法吗?如果这是为什么他们做出这个改变?
我找到了这个链接,但它没有用.我收到了Ladislav Mrnka在第一个回答的第一条评论中详述的错误.我后来发现这个链接似乎工作正常.
我重新阅读了我发布的第一个链接,我发现了另一个解决方案,我只是创建了一个部分类:
public partial class MyEntities : DbContext
{
public MyEntities(string connectionString) : base(connectionString)
{
Database.Connection.ConnectionString = connectionString;
}
}
Run Code Online (Sandbox Code Playgroud) entity-framework connection-string entity-framework-4.1 entity-framework-5
我首先使用.NET 4.0,MVC3和EF5代码.
我的解决方案分为三个项目,依赖项如下所示:
Project.Web - > Project.BLL - > Project.DAL
Project.DAL层包含我的实体框架数据上下文类和我的所有实体,但我的启动项目是Project.Web,因此它包含我的Web.config,连接字符串和实际的SQL压缩数据库.
我正在尝试启用迁移,因此我可以在不擦除现有数据的情况下向EF模型添加新表.但是,当我运行"启用 - 迁移"时,我得到了
No context type was found in the assembly 'Project.Web'.
Run Code Online (Sandbox Code Playgroud)
如果我将启动项目设置为Project.DAL,则错误更改为
Could not load assembly 'Project.Web'. (If you are using Code First Migrations inside Visual Studio this can happen if the startUp project for your solution does not reference the project that contains your migrations. You can either change the startUp project for your solution or use the -StartUpProjectName parameter.)
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会出现这个错误或者我可以做些什么来修复它?
asp.net entity-framework connection-string data-access-layer entity-framework-5
我有这个错误消息,每次运行应用程序时都会继续显示.我正在使用实体Framework 5: Code First
这是错误信息,
System.NotSupportedException: Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations.
at System.Data.Entity.Internal.ModelCompatibilityChecker.CompatibleWithModel(InternalContext internalContext, ModelHashCalculator modelHashCalculator, Boolean throwIfNoMetadata)
at System.Data.Entity.Internal.InternalContext.CompatibleWithModel(Boolean throwIfNoMetadata)
at System.Data.Entity.Database.CompatibleWithModel(Boolean throwIfNoMetadata)
at System.Data.Entity.DropCreateDatabaseIfModelChanges`1.InitializeDatabase(TContext context)
at System.Data.Entity.Database.<>c__DisplayClass2`1.<SetInitializerInternal>b__0(DbContext c)
at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6()
at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)
at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() …Run Code Online (Sandbox Code Playgroud) 我有一个从db with Entity Framework生成的模型.当我对数据库进行任何更改时,我会从数据库更新模型以获取模型中的更改.但此更新适用于模型中包含的所有实体(表).
现在我在表Tab1中添加一个新列.我不想将数据库中的模型更新为我不希望包含在模型中的其他一些更改.我可以手动在实体Tab1的模型中添加新属性.然后它导致了映射错误.
所以我需要更新Model.Store表以包含新列.这意味着我只想更新模型Tab1.
我怎样才能做到这一点?
entity-framework entity-framework-4 entity-framework-4.1 entity-framework-5