标签: entity-framework-5

实体框架5为表指定的多个标识列.每个表只允许一个标识列

我正在创建这个模型作为我的代码第一个实体框架的一部分

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,Action1 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(TaskCompletionSource 1 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 …

c#-4.0 entity-framework-5

19
推荐指数
2
解决办法
2万
查看次数

AddOrUpdate工作不符合预期,并产生重复

我正在使用基于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)

c# entity-framework upsert entity-framework-5

19
推荐指数
1
解决办法
2万
查看次数

'System.Data.Entity.Infrastructure'的参考是什么?

使用Entity Framework Power Tools Beta 2扩展,它使用以下导入生成模型类:

using System.Data.Entity.Infrastructure;
Run Code Online (Sandbox Code Playgroud)

我需要使用Visual Studio 2010将哪些参考包含到我的项目中?

目前,我有以下参考资料:

  • log4net的
  • 系统配置
  • System.Core程序
  • System.Data
  • System.Data.Entity的
  • 的System.Web
  • System.Web.Mvc
  • 了System.XML

在" 添加引用"对话框中,我有以下内容:

添加参考对话框

visual-studio-2010 ef-code-first entity-framework-5

19
推荐指数
1
解决办法
3万
查看次数

如何避免在构造函数中调用虚函数?

大多数(如果不是全部)我的实体框架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)

.net c# entity-framework entity-framework-5

19
推荐指数
2
解决办法
3354
查看次数

如何使用Entity framework 5和MVC 4创建审计跟踪

我正在使用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)

.net c# asp.net-mvc-4 entity-framework-5

19
推荐指数
3
解决办法
3万
查看次数

EF5 Code First中的多对多关系如何指定表名?

我对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)

many-to-many ef-code-first entity-framework-5

18
推荐指数
1
解决办法
8865
查看次数

EF迁移:自动迁移中的RenameColumn?

如果重命名属性,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

18
推荐指数
2
解决办法
4649
查看次数

什么是独立协会和外国关键协会?

可能重复:
代码优先:独立关联与外键关联?

在EF 4或EF 5 Code First中,什么是"独立关联"以及什么是MSDN外键与独立关系使用的"外键关联" - 实体框架5有哪些改进?(重点补充):

2.4.1使用外键关联降低视图生成成本

我们已经看到了一些案例,其中模型中的关联从独立关联切换到外键关联 大大改善了视图生成所花费的时间.

所以 - 现在我知道要使用哪个.只要我知道它们是什么以及如何转换成它!那么我的问题是,您如何定义这些条款?什么流利/注释/约定调用每个?

c# entity-framework-4 entity-framework-5

18
推荐指数
2
解决办法
1万
查看次数

建模多态关联数据库优先与代码优先

我们有一个数据库,其中一个表包含可以是其他几个表的子记录.它有一个"软"外键,由所有者的Id和表名组成.这种(反)模式被称为"多态关联".我们知道它不是有史以来最好的数据库设计,我们会在适当的时候改变它,但不会在不久的将来改变它.让我举一个简化的例子:

在此输入图像描述

两者Event,PersonProduct在评论中有记录.如您所见,没有严格的FK约束.

在实体框架可以通过sublassing支持这种模式Comment进入EventComment等,让EventEventComments收集等:

在此输入图像描述

从数据库生成基本模型后,手动添加子类和关联.OwnerCode是这个TPH模型中的鉴别器.请注意Event,PersonProduct完全不同的实体.为它们建立一个公共基类是没有意义的.

这是数据库优先的.我们的现实模型就是这样,没问题.

好.现在我们想要转向代码优先.所以我开始将数据库逆向工程化为代码优先模型(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".

如果我删除三个实体注释关联中的两个,那就没关系,但当然这不是治愈方法.

更多细节:

  • 可以通过添加DbContext生成器项从edmx创建工作的DbContext模型("代码秒").(这将是暂时的解决方法).
  • 当我将工作代码优先模型(带有一个关联)导出到edmx(EdmxWriter)时,关联似乎在存储模型中,而在原始edmx中,它们是概念模型的一部分.

那么,我该如何创建这个模型代码呢?我认为关键是如何指导代码优先映射概念模型中的关联,而不是存储模型.

c# foreign-keys ef-code-first ef-database-first entity-framework-5

18
推荐指数
1
解决办法
2326
查看次数

我如何以编程方式读取EF DbContext元数据?

我有使用EF-CodeFirst 5的应用程序(dll ver 4.4.0.0,在.net 4.0上).

我需要能够读取实体元数据,以便我可以为给定的条目类型获取以下信息:

  • 哪些属性是一对多关系(引用实体)
  • 哪些属性是多个关系(引用当前属性的实体集合)
  • 也很好,但不是绝对必要:哪些属性是很多关系(关系的集合)

我可以通过在属性列表上编写foreach循环来获取此信息,然后通过依赖所有虚拟引用来"识别"它们,但我觉得这不是"正确的"方式.我知道EdmxWriter可以提供xml格式的信息,但它是通过访问不能公开访问的InternalContext来实现的,我想直接获得强类型列表/数组,而不使用那个xml.我应该使用哪种API(如果有这样的API,似乎我找不到它)?

metadata ef-code-first entity-framework-5

17
推荐指数
1
解决办法
9745
查看次数