我有一个数据库,我使用2种不同的模式.模式就像名称空间(如果我错了,请纠正我).这样我有1个db和当前2个模式...因此1个模式中的表可以与其他模式中的表命名相同,因为它们位于不同的模式中.
如何让EF Code首先与不同的模式进行通信而不是默认模式?
是否与MapSingleType和覆盖方法有关,还是我可以做其他事情?
任何帮助真的很感激.
如何使用Entity Framework 4 Code-First定义数据库视图?我在任何地方都找不到任何相关的东西!
我在实体框架代码优先查询中遇到了一些性能问题,我相信预编译可能就是答案.如果我使用"普通"实体框架,我只需使用CompiledQuery.Compile方法预先查询我的查询.但由于我有一个DbContext而不是ObjectContext,我无法让它工作.
我确实认识到DbContext是一个IObjectContextAdapter,它允许我访问ObjectContext,但我找不到让我从我的预编译查询中运行的对象上下文中获取IQueryable的方法.我试图使用CreateObjectSet,但是当EF试图运行查询时,它抱怨它无法将该方法转换为SQL.
那么针对Code-First DbContext预编译LINQ查询的最佳方法是什么?
嗨我正在使用这个nuGet包的Beta 1版本,数据库已经全部创建,我需要知道是否有办法通过迁移来填充我的表.Thanxs
我最近遇到了Entity Framework Code First的这个奇怪问题.
我的班级看起来像这样
public class Status
{
[Key]
public int StatusID { get; set; }
public string Name { get; set; }
public int MemberID { get; set; }
[ForeignKey("MemberID")]
public virtual Member Member { get; set; }
public int PosterID { get; set; }
[ForeignKey("PosterID")]
public virtual Member Poster { get; set; }
public virtual ICollection<StatusLike> StatusLikes { get; set; }
public virtual ICollection<StatusComment> StatusComments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的会员班看起来像这样
public class Member
{
[Key]
public …Run Code Online (Sandbox Code Playgroud) 我对EF很新,我不确定如何做到这一点.
我有一个多对多的关系,就像这样:

当我尝试将资源(Recurso)添加到配置文件(Perfil)时,我收到以下错误:
Invalid object name 'dbo.RecursoPerfils
地狱到底RecursoPerfils来自哪里?
如何指定(最好通过属性注释)此关系的表名?
请参阅以下模型:
[Table("Perfil")]
public class Perfil
{
public Perfil()
{
this.Usuarios = new List<Usuario>();
this.Recursos = new List<Recurso>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int IdPerfil { get; set; }
[Required]
public string Descricao { get; set; }
public virtual ICollection<Usuario> Usuarios { get; set; }
public virtual ICollection<Recurso> Recursos { get; set; }
}
[Table("Recurso")]
public class Recurso
{
public Recurso()
{
this.Perfis = new List<Perfil>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int …Run Code Online (Sandbox Code Playgroud) 如果重命名属性,Visual Studio IDE非常智能,可以帮助您重构在整个代码中重命名该属性.如果重命名位于EF迁移中使用的模型上,则运行标准自动迁移,如:
update-database -f
Run Code Online (Sandbox Code Playgroud)
你会得到这个:
AddColumn("NewName"...
DropColumn("OldName"...
Run Code Online (Sandbox Code Playgroud)
不是你想要的.显然,此时运行Add-Migration将允许您进入并手动将这两个调用更改为对RenameColumn的单个调用,但是有一些方法可以让自动迁移自动执行此操作吗?一些财产重命名方法可能会让我做得不对劲?
我在VS2012中使用EF 5.0,但这种行为也出现在EF 4.3.1和VS2010中.
entity-framework code-first ef-code-first ef-migrations entity-framework-5
MVC4 +实体框架4.4 + MySql + POCO /代码优先
我正在设置上面的配置..这是我的课程:
namespace BTD.DataContext
{
public class BTDContext : DbContext
{
public BTDContext()
: base("name=BTDContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//modelBuilder.Conventions.Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>();
}
public DbSet<Product> Products { get; set; }
public DbSet<ProductImage> ProductImages { get; set; }
}
}
namespace BTD.Data
{
[Table("Product")]
public class Product
{
[Key]
public long ProductId { get; set; }
[DisplayName("Manufacturer")]
public int? ManufacturerId { get; set; }
[Required]
[StringLength(150)]
public string Name { get; set; …Run Code Online (Sandbox Code Playgroud) 我们有一个数据库,其中一个表包含可以是其他几个表的子记录.它有一个"软"外键,由所有者的Id和表名组成.这种(反)模式被称为"多态关联".我们知道它不是有史以来最好的数据库设计,我们会在适当的时候改变它,但不会在不久的将来改变它.让我举一个简化的例子:

两者Event,Person并Product在评论中有记录.如您所见,没有严格的FK约束.
在实体框架可以通过sublassing支持这种模式Comment进入EventComment等,让Event有EventComments收集等:

从数据库生成基本模型后,手动添加子类和关联.OwnerCode是这个TPH模型中的鉴别器.请注意Event,Person和Product完全不同的实体.为它们建立一个公共基类是没有意义的.
这是数据库优先的.我们的现实模型就是这样,没问题.
好.现在我们想要转向代码优先.所以我开始将数据库逆向工程化为代码优先模型(EF Power Tools),然后继续创建子类并映射关联和继承.试图连接到Linqpad中的模型.那是麻烦开始的时候.
当尝试使用此模型执行查询时,它会抛出一个 InvalidOperationExeception
外键组件"OwnerId"不是"EventComment"类型的声明属性.验证它是否未从模型中明确排除,并且它是有效的原始属性.
当我有双向关联并被OwnerId映射为属性时会发生这种情况Comment.我的EventMapclass(EntityTypeConfiguration<Event>)中的映射如下所示:
this.HasMany(x => x.Comments).WithRequired(c => c.Event)
.HasForeignKey(c => c.OwnerId);
Run Code Online (Sandbox Code Playgroud)
所以我尝试OwnerId在模型中映射关联:
this.HasMany(x => x.Comments).WithRequired().Map(m => m.MapKey("OwnerId"));
Run Code Online (Sandbox Code Playgroud)
这引发了一个 MetaDataException
指定的架构无效.错误:(10,6):错误0019:类型中的每个属性名称必须是唯一的.已定义属性名称"OwnerId".(11,6):错误0019:类型中的每个属性名称必须是唯一的.已定义属性名称"OwnerId".
如果我删除三个实体注释关联中的两个,那就没关系,但当然这不是治愈方法.
更多细节:
EdmxWriter)时,关联似乎在存储模型中,而在原始edmx中,它们是概念模型的一部分.那么,我该如何创建这个模型代码呢?我认为关键是如何指导代码优先映射概念模型中的关联,而不是存储模型.
c# foreign-keys ef-code-first ef-database-first entity-framework-5
我正在使用代码优先方法开发mvc 5应用程序.
我正面临一个问题.在我第一次尝试下面的命令时,它在该数据库中工作并生成表.但是当我更改了一些类,然后尝试了前2个查询时,它就适用于那种情况但是当我尝试第三个命令时,它给了我这个消息.
First step ========== enable-migrations -ContextTypeName IdentityDb -MigrationsDirectory DAL\IdentityMigrations enable-migrations -ContextTypeName SMSContext -MigrationsDirectory DAL\SMSMigrations Second Step =========== add-migration -ConfigurationTypeName SMSApp.DAL.IdentityMigrations.Configuration "InitialCreate" add-migration -ConfigurationTypeName SMSApp.DAL.SMSMigrations.Configuration "InitialCreate" Third Step ========== update-database -ConfigurationTypeName SMSApp.DAL.IdentityMigrations.Configuration -verbose update-database -ConfigurationTypeName SMSApp.DAL.SMSMigrations.Configuration -verbose
看到第一个错误:
PM> add-migration -ConfigurationTypeName SMSApp.DAL.IdentityMigrations.Configuration "InitialCreate"
Scaffolding migration ' '.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next …Run Code Online (Sandbox Code Playgroud) ef-code-first ×10
asp.net ×2
asp.net-mvc ×2
c# ×2
.net ×1
code-first ×1
foreign-keys ×1
many-to-many ×1
mysql ×1
schema ×1