我正在创建这个模型作为我的代码第一个实体框架的一部分
public class NewUserRegistration
{
[Key]
public int NewUserRegistrationId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用Update-Database -Verbose -ForcePackage Manger Console中的命令在此更新过程中会出现此异常Applying automatic migration: 201211252223088_AutomaticMigration.
ALTER TABLE [dbo].[NewUserRegistration] ADD [NewUserRegistrationId] [int] NOT NULL IDENTITY System.Data.SqlClient.SqlException(0x80131904):为表'NewUserRegistration'指定的多个标识列.每个表只允许一个标识列.在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔callerHasConnectionLock,布尔asyncClose)的System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&)中的1 wrapCloseInAction) dataReady)在System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName,Boolean async,Int32 timeout),System.Data.SqlClmand.SmandCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable …
我正在使用基于Code-First DBContext的EF5设置.
在DbMigrationsConfiguration.Seed我试图用默认的虚拟数据填充数据库.为了完成这个任务,我使用DbSet.AddOrUpdate方法.
最简单的代码来说明我的目标:
j = 0;
var cities = new[]
{
"Berlin",
"Vienna",
"London",
"Bristol",
"Rome",
"Stockholm",
"Oslo",
"Helsinki",
"Amsterdam",
"Dublin"
};
var cityObjects = new City[cities.Length];
foreach (string c in cities)
{
int id = r.NextDouble() > 0.5 ? 0 : 1;
var city = new City
{
Id = j,
Name = c,
Slug = c.ToLowerInvariant(),
Region = regions[id],
RegionId = regions[id].Id,
Reviewed = true
};
context.CitySet.AddOrUpdate(cc => cc.Id, city);
cityObjects[j] = city; …Run Code Online (Sandbox Code Playgroud) 使用Entity Framework Power Tools Beta 2扩展,它使用以下导入生成模型类:
using System.Data.Entity.Infrastructure;
Run Code Online (Sandbox Code Playgroud)
我需要使用Visual Studio 2010将哪些参考包含到我的项目中?
目前,我有以下参考资料:
在" 添加引用"对话框中,我有以下内容:

大多数(如果不是全部)我的实体框架POCO都具有虚拟功能.我需要这些函数是虚拟的,以便实体可以延迟加载.
如果我Accommodations在构造函数中初始化,那么我将在构造函数中调用虚函数,这是不好的做法.
但是Accommodations如果不在构造函数中,我怎么能初始化?
public class Venue
{
public Venue()
{
Accommodations = new HashSet<Accommodation>();
}
public virtual ICollection<Accommodation> Accommodations { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我正在使用EF 5构建MVC 4应用程序.我需要执行审计跟踪,即记录最终用户所做的任何更改.
我已经问了几次这个问题,但之前没有真正得到满意的答案.所以我希望在某个地方添加更多细节...
目前我有多个存储库
即
public class AuditZoneRepository : IAuditZoneRepository
{
private AISDbContext context = new AISDbContext();
public int Save(AuditZone model, ModelStateDictionary modelState)
{
if (model.Id == 0)
{
context.AuditZones.Add(model);
}
else
{
var recordToUpdate = context.AuditZones.FirstOrDefault(x => x.Id == model.Id);
if (recordToUpdate != null)
{
recordToUpdate.Description = model.Description;
recordToUpdate.Valid = model.Valid;
recordToUpdate.ModifiedDate = DateTime.Now;
}
}
try
{
context.SaveChanges();
return 1;
}
catch (Exception ex)
{
modelState.AddModelError("", "Database error has occured. Please try again later");
return -1;
} …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
可能重复:
代码优先:独立关联与外键关联?
在EF 4或EF 5 Code First中,什么是"独立关联"以及什么是MSDN或外键与独立关系上使用的"外键关联" - 实体框架5有哪些改进?(重点补充):
2.4.1使用外键关联降低视图生成成本
我们已经看到了一些案例,其中模型中的关联从独立关联切换到外键关联 大大改善了视图生成所花费的时间.
所以 - 现在我知道要使用哪个.只要我知道它们是什么以及如何转换成它!那么我的问题是,您如何定义这些条款?什么流利/注释/约定调用每个?
我们有一个数据库,其中一个表包含可以是其他几个表的子记录.它有一个"软"外键,由所有者的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
我有使用EF-CodeFirst 5的应用程序(dll ver 4.4.0.0,在.net 4.0上).
我需要能够读取实体元数据,以便我可以为给定的条目类型获取以下信息:
我可以通过在属性列表上编写foreach循环来获取此信息,然后通过依赖所有虚拟引用来"识别"它们,但我觉得这不是"正确的"方式.我知道EdmxWriter可以提供xml格式的信息,但它是通过访问不能公开访问的InternalContext来实现的,我想直接获得强类型列表/数组,而不使用那个xml.我应该使用哪种API(如果有这样的API,似乎我找不到它)?