标签: ef-code-first

System.Data.Entity.Edm.EdmEntityType没有定义键

我正在尝试使用Code-First创建一个sdf,但是我收到的错误是没有为我的表定义键,并且无法理解为什么.

我有以下课程: -

public class Article
{
    [Key]
    public int ArticleID;

    //[Display(Name = "Title")]
    //[MaxLength(255)]
    //[Required(ErrorMessage="Title is required")]
    public string ArticleTitle;

    //[Display(Name = "Date")]
    //[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true, NullDisplayText = "")]
    //[Required(ErrorMessage = "Date is required")]
    public DateTime ArticleDate;

    //[Display(Name = "Text")]
    //[Required(ErrorMessage = "Text is required")]
    public string ArticleText;

    //[Display(Name = "Source")]
    public string ArticleSource;

    //[Display(Name = "Category")]
    public int CategoryID { get; set; }

    public virtual Category Category { get; set; }

}

public class Category …
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-code-first entity-framework-4.1

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

实体框架代码首先是多对多的NullReference

我一直在su.Companies.Add(co)上得到一个NullReferenceException; 线.我认为,通过我的模型定义方式,它应该工作.自动完成,听起来像一个新手,完成这很好.我显然是EntityFramework的新手.

救命?

using (var db = new TicketdocketEntities())
{
  var su = new SiteUser { UserName = model.UserName };
  db.SiteUser.Add(su);
  var co = new Company { Name = "Hello" };
  su.Companies.Add(co);
  db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

楷模

public class Company
{
  [Key]
  public int CompanyId { get; set; }
  public string Name { get; set; }

  public virtual ICollection<SiteUser> SiteUsers { get; set; }
}

public class SiteUser
{
  [Key]
  public int SiteUserID { get; set; }
  public string UserName { get; …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-relationship entity-framework-4 ef-code-first entity-framework-4.1

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

MVC3中的数据迁移(使用EF.4.3)

我正在为我的项目进行数据迁移.但我有一个问题,例如:我有以下字段的Book表:

ID  Name   Color

1   Java    red

2   MVC     blue

3   .Net    blue
Run Code Online (Sandbox Code Playgroud)

我尝试使用Code First技术将字段名称从"Color"更改为"BookColor".但迁移后,表格如下所示:

ID  Name   BookColor

1   Java    null

2   MVC     null

3   .Net    null
Run Code Online (Sandbox Code Playgroud)

我丢失了我的场地值.如何确保所有价值都被转移?

我正在使用Entity Framework和MVC3

编辑这是我的DBMigration类:

public partial class AddCreative : DbMigration
{

    public override void Up()
    {
        AddColumn("Authors", "Names", c => c.String(maxLength: 4000));
        DropColumn("Authors", "Name");
    }


    public override void Down()
    {
        AddColumn("Authors", "Name", c => c.String(maxLength: 4000));
        DropColumn("Authors", "Names");
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经改变Name,以Names 改变后(我失去了我的名字字段数据).

ef-code-first ef-migrations entity-framework-4.3

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

EF 4.3 Code First迁移 - 每次迁移的种子

最近开始使用Code First Migrations并且希望在每个Up方法中播种数据.

这可能吗?

IE浏览器.

  1. 创建数据库表
  2. 填写数据

丢弃:

  1. 从连接表中删除数据
  2. 删除表

entity-framework ef-code-first ef-migrations

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

使用具有"代码优先"模式的Entity Framework 4.0时,如何防止标识列上的自动增量

我正在定义POCO,与Entity Framework 4.0的Code First功能一起使用.

但由于我的数据来自外部源,并且我想保持标识列与外部源的相同,我想自己设置ID.

我在调用DbContext.Add()和context.SaveChanges()之前在我的代码中设置了ID,但ID值被忽略并由DB列上定义的自动增量(AI)设置.

数据库是mySQL,由EF自动生成.

有谁知道如何阻止在ID列上创建AI属性,或者显式设置实体ID,尽管列是这样定义的?

编辑:我从@flem得到的答案对我有用.但我需要一个稍微不同的场景才能工作:是否有可能以这样的方式定义POCO,当我设置它将使用它的值时,当我不设置它时,它会自动递增?根据这个mySQL论坛回答 mySQL应该很好地处理这个场景,但似乎Entity Framwork不...

.net entity-framework ef-code-first

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

EFCodeFirst:无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象

我试图找出导致此错误的原因,我列出了我的代码中的一些相关区域,希望有助于解决我的问题.

配方实体的成员集合如下所示:

public virtual IList<Member> Members { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是成员实体上的Recipes集合:

public virtual IList<Recipe> Recipes { get; set; }
Run Code Online (Sandbox Code Playgroud)

我在创建DbContext时执行以下操作,以便在单独的表中建立多对多关系

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // have to specify these mappings using the EF Fluent API otherwise I end up with
        // the foreign key fields being placed inside the Recipe and Member tables, which wouldn't
        // give a many-to-many relationship
        modelBuilder.Entity<Recipe>()
            .HasMany(r => r.Members)
            .WithMany(m => m.Recipes)
        .Map(x => {
            x.ToTable("Cookbooks"); // using a mapping table for a …
Run Code Online (Sandbox Code Playgroud)

c# ef-code-first asp.net-mvc-3 entity-framework-4.3

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

Entity Framework迁移器的连接

使用Entity Framework 5.0,我试图在我的MVC站点的启动例程中手动迁移我的代码优先数据库.为此,我首先创建一个DbContext实例,然后运行以下代码:

var migrator = new MigrateDatabaseToLatestVersion<DataContext, Configuration>();
migrator.InitializeDatabase(this.dataContext);
Run Code Online (Sandbox Code Playgroud)

我假设与dataContext的连接关联的数据库将是迁移的数据库.尽管事实并非如此.相反,它总是尝试在本地SQLExpress实例上迁移数据库.

MigrateDatabaseToLatestVersion构造函数存在重载,它接受数据库连接字符串名称,但我的项目使用的是Azure,并且不使用标准的ConnectionStrings配置部分.理想情况下,我只是传递一个连接字符串,我可以使用它.这可能吗?

entity-framework ef-code-first ef-migrations

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

首先在EF代码中映射生成的关系表的名称

我首先尝试使用Code,并且我需要在db中使用(所有)我的表的前缀.

在我的DbContext中,我有以下实体:

    public DbSet<Person> People { get; set; }
    public DbSet<Department> Departments { get; set; }
Run Code Online (Sandbox Code Playgroud)

我可以通过覆盖成功映射我的实体的表名:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>().ToTable("w_people");
        modelBuilder.Entity<Department>().ToTable("w_departments");
    }
Run Code Online (Sandbox Code Playgroud)

但是对于那些不直接映射到表的表,我无法想出前缀.

在我的示例中,人们可以属于许多部门,因此EF创建了一个"非实体"表.(我是一个EF菜鸟所以这些表可能有一个奇特的名字)所以在我的数据库中我得到三个表:

w_people
w_departments
PersonsDepartments
Run Code Online (Sandbox Code Playgroud)

PersonsDepartments表就是我追求的目标.如何在生成后为这些生成的表添加前缀或更改名称/映射?

TIA

entity-framework ef-code-first

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

实体框架:代码优先.共享和实例上下文

我建设使用实体框架代码首先与mvc4 Web应用程序的方式分层的应用,主要是分开的Data,ServicesWeb.

从我的网站上我这样做:

public void Foo() {
    EntityService _svc = new EntityService();
    Entity = _svc.FindById(1);
}
Run Code Online (Sandbox Code Playgroud)

服务方法如下所示:

private readonly MyContext _ctx = new MyContext();

public Entity FindById(long id) {
    return _ctx.Entities.SingleOrDefault(q => q.EntityId == id);
}
Run Code Online (Sandbox Code Playgroud)

问题是当我需要使用多个服务时,因为每个服务都会创建它自己的上下文.

试图解决这个问题我做了这样的事情:

public class MyContext : DbContext {
    private static MyContext _ctx;

    public MyContext() : base("name=myConnectionString") { }

    public static MyContext GetSharedInstance() {
        return GetSharedInstance(false);
    }

    public static MyContext GetSharedInstance(bool renew) {
        if(_ctx == null || renew)
            _ctx …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first

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

实体框架:代码优先 - 列映射

我有这样的模型:

public class Entity
{
    [Key, Required]
    public virtual long EntityId { get; set; }
    [Required]
    public virtual string Name { get; set; }
    public virtual long? ParentEntityId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的表:

create table Entities(
    EntityId bigint not null identity(1, 1),
    Name nvarchar(64) not null,
    ParentEntityId bigint null
)
Run Code Online (Sandbox Code Playgroud)

ParentEntityId是EntityId的外键.

当我尝试创建一个Entity实体时,这是我得到的异常: Invalid column name 'ParentEntity_EntityId'.

我不知道为什么EF会选择该特定列的约定,但如果我这样做:

[Column("TryPickThisName")]
public virtual int? ParentEntityId { get; set; }
Run Code Online (Sandbox Code Playgroud)

使用"TryPickThisName"列名称显示相同的错误.最后,如果我正确地写了列名删除属性,它将显示原始错误消息.

entity-framework ef-code-first

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