标签: entity-framework-5

如何首先使用实体​​框架代码指定字段的最大列长度

创建表时是否有可用的属性?我试过[StringLength]但似乎被忽略了.

 public class EntityRegister
 {
     public int Id { get; set; }
     [StringLength(450)]
     public string Name { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

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

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

如何停止添加dbo的Entity Framework 5迁移.成为关键名称?

我开始使用Entity Framework 4.3 Code First进行手动迁移和SQL Express 2008并最近更新到EF5(在VS 2010中),并注意到现在当我更改类似外键约束时,迁移代码会添加"dbo".到表名的开头,因此它构造的外键名称对于现有约束是不正确的(现在通常看起来很奇怪).

EF 4.3中的原始迁移脚本(注意ForeignKey("Products",t => t.Product_Id)):

    CreateTable(
        "Products",
        c => new
            {
                Id = c.Int(nullable: false, identity: true),
                ProductName = c.String(),
            })
        .PrimaryKey(t => t.Id);

    CreateTable(
        "KitComponents",
        c => new
            {
                Id = c.Int(nullable: false, identity: true),
                Component_Id = c.Int(),
                Product_Id = c.Int(),
            })
        .PrimaryKey(t => t.Id)
        .ForeignKey("Products", t => t.Component_Id)
        .ForeignKey("Products", t => t.Product_Id)
        .Index(t => t.Component_Id)
        .Index(t => t.Product_Id);
Run Code Online (Sandbox Code Playgroud)

生成的外键名称:FK_KitComponents_Products_Product_Id FK_KitComponents_Products_Component_Id

如果我然后升级到EF5并更改外键,则迁移代码看起来像(注意"dbo.KitComponents"和"dbo.Products"而不是"KitComponents"和"Products"):

DropForeignKey("dbo.KitComponents", "Product_Id", "dbo.Products");
DropIndex("dbo.KitComponents", …
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-5

30
推荐指数
2
解决办法
9467
查看次数

实体框架5中的ExecuteStoreCommand方法在哪里?

我在VS2012中使用EF5,我试图删除某些表的所有数据ExecuteStoreCommand,如下所示:

ctx.ExecuteStoreCommand("TRUNCATE TABLE [" + tableName + "]");
Run Code Online (Sandbox Code Playgroud)

但问题是EF告诉我,方法ExecuteStoreCommand未找到.我不明白为什么?

你能告诉我为什么吗?或者给我一个高效的解决方案删除表格的所有数据.

c# entity-framework entity-framework-5 visual-studio-2012

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

EntityFramewok:如何配置Cascade-Delete以使外键无效

EntityFramework的文档声明可能存在以下行为:

如果依赖实体上的外键可以为空,则Code First不会在关系上设置级联删除,并且当删除主体时,外键将设置为null.

(来自http://msdn.microsoft.com/en-us/jj591620)

但是,我无法实现这样的行为.

我使用代码优先定义了以下实体:

public class TestMaster
{
    public int Id { get; set; }
    public string Name { get; set; }        
    public virtual ICollection<TestChild> Children { get; set; }       
}

public class TestChild
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual TestMaster Master { get; set; }
    public int? MasterId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以下是Fluent API映射配置:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TestMaster>()
                    .HasMany(e => …
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-5

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

EF5 Code First Enums和Lookup Tables

我想定义一个用于EF5的枚举,以及一​​个相应的查找表.我知道EF5现在支持枚举,但开箱即用,它似乎只在对象级别支持此功能,并且默认情况下不会为这些查找值添加表格.

例如,我有一个用户实体:

public class User
{
    int Id { get; set; }
    string Name { get; set; }
    UserType UserType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和UserType枚举:

public enum UserType
{
    Member = 1,
    Moderator = 2,
    Administrator = 3
}
Run Code Online (Sandbox Code Playgroud)

我希望数据库生成创建一个表,如:

create table UserType
(
    Id int,
    Name nvarchar(max)
)
Run Code Online (Sandbox Code Playgroud)

这可能吗?

entity-framework ef-code-first entity-framework-5

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

使用Entity Framework 5 Code First将CreatedDate添加到实体

我正在尝试向CreatedDate我的模型中的实体添加属性,并且正在使用EF5 Code First.我希望这个日期一旦设置就不会改变,我希望它是一个UTC日期.我不想使用构造函数,因为我在模型中有许多实体要从包含该CreatedDate属性的抽象类继承,并且我不能使用接口强制构造函数.

我已经尝试了不同的数据注释和我试图写一个数据库初始化,将拿起一个特定的实体类型和写有一个ALTER约束getdate()正确的默认值table_namecolumn_name,但我一直没能正确地写代码.

请不要向我推荐AuditDbContext - 实体框架审计上下文EntityFramework.Extended工具,因为它们不能满足我的需要.

UPDATE

CreatedDate是空的SaveChanges()因为我将ViewModel传递给我的视图,它正确地没有调用其中的审计属性CreatedDate.即使我将模型传递给我的视图,我也不会CreatedDate在视图中编辑或存储它.

在这里读到我可以添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)],这将告诉EF CreatedDate在插入和更新后正确存储,但不允许我的应用程序更改它:但我只是Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF通过添加此属性得到错误.

我即将切换到EF Model First,因为这个简单的数据库要求在Code First中实现是荒谬的.

entity-framework code-first ef-code-first ef-migrations entity-framework-5

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

EF 5迁移无法连接到我们的数据库,即使它在运行时运行良好

我们有三个项目.

  • Company.Domain(类库)
  • Company.PublicWebsite(MVC3 Web Application)
  • Company.InternalWebsite(MVC3 Web应用程序)

这两个网站项目都参考了Company.Domain.

我们的EF 5 DbContext住在里面Company.Domain.Data.EntityFramework,它看起来像这样:

using System.Data.Entity;
using Company.Domain.Data.EntityFramework.Entities;

namespace Company.Domain.Data.EntityFramework.
{
    public class CompanyEntities : DbContext
    {
        public DbSet<Notification> Notifications { get; set; }
        public DbSet<Report> Reports { get; set; }
        public DbSet<ReportSection> ReportSections { get; set; }
        public DbSet<ReportPage> ReportPages { get; set; }
        // brevity brevity
    }
}
Run Code Online (Sandbox Code Playgroud)

我们已经启用了迁移并且过去成功使用了该工具,因此我不确定为什么我们现在遇到问题.我们的迁移配置存在,Company.Domain.Data.EntityFramework.Migrations如下所示:

namespace Company.Domain.Data.EntityFramework.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    using Company.Domain.Data.EntityFramework;

    public class …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first ef-migrations entity-framework-5

29
推荐指数
1
解决办法
9822
查看次数

关系处于已删除状态

当我试图清除一个集合(调用.Clear)时,我得到以下异常:

保存不公开其关系的外键属性的实体时发生错误.EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源.通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常.有关详细信息,请参阅InnerException.

内在的例外是:

来自'User_Availability'AssociationSet的关系处于'已删除'状态.给定多重约束,相应的'User_Availability_Target'也必须处于'已删除'状态.

用户看起来像这样:

....
ICollection<Availability> Availability { get; set; }
Run Code Online (Sandbox Code Playgroud)

可用性如下所示:

int ID { get; set; }
User User { get; set; }
DateTime Start { get; set;
DateTime End { get; set; }
Run Code Online (Sandbox Code Playgroud)

配置如下:

HasMany(x => x.Availability).WithRequired(x => x.User);
HasRequired(x => x.User).WithMany(x => x.Availability);
Run Code Online (Sandbox Code Playgroud)

导致问题的代码是:

user.Availability.Clear();
Run Code Online (Sandbox Code Playgroud)

我已经看过其他替代方法,比如使用DbSet删除项目,但我觉得我的代码不会那么干净.有没有办法通过清除集合来实现这一目标?

c# entity-framework ef-code-first entity-framework-5

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

实体框架5/6中的可更新视图

根据http://technet.microsoft.com/en-us/library/ms187956.aspx,我有几个可更新的视图.

我的所有观点都遵循上述文章中的规范.我已在SQL Management Studio中验证了可以更新,插入和删除视图.

我所做的研究使我有了两个选项来使我的Entity Framework 5/6模型中的视图可更新:

  1. 从每个视图中删除标记,但是,从数据库更新上下文时,MyContext.edmx中完成的任何工作都会被覆盖.这意味着这个解决方案对我的项目来说不太可行.

  2. 为每个视图添加插入,更新和删除存储过程,并将它们映射到设计器中.我不特别喜欢创建这么多存储过程的想法.

是否有任何简单的方法告诉EF5或EF6可以添加/更新/删除视图在运行后续"从数据库更新模型"命令时不会被删除,而无需为每个输入方法编写存储过程(插入,更新) ,删除)在每个视图?

c# entity-framework-5 entity-framework-6

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

最有效地处理创建,更新,删除实体框架代码优先

注意:我使用的是Entity Framework第5版

在我的通用库,我有Add,EditDelete下面的方法:

public class EntityRepository<T> : IEntityRepository<T>
    where T : class, IEntity, new() {

    readonly DbContext _entitiesContext;

    public EntityRepository(DbContext entitiesContext) {

        if (entitiesContext == null) {

            throw new ArgumentNullException("entitiesContext");
        }

        _entitiesContext = entitiesContext;
    }

    //...

    public virtual void Add(T entity) {

        DbEntityEntry dbEntityEntry = _entitiesContext.Entry<T>(entity);
        if (dbEntityEntry.State != EntityState.Detached) {

            dbEntityEntry.State = EntityState.Added;
        }
        else {

            _entitiesContext.Set<T>().Add(entity);
        }
    }

    public virtual void Edit(T entity) {

        DbEntityEntry dbEntityEntry = _entitiesContext.Entry<T>(entity);
        if (dbEntityEntry.State == …
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-code-first dbcontext entity-framework-5

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