标签: ef-code-first

MVC3中相同类型的实体之间的多对多关系

我有一个ASP.NET MVC3应用程序,我使用Entity Framework 4.3 Code-First和Migrations.

我一直在尝试在相同类型的实体之间创建多对多关系,但是当我使用迁移构建迁移时,它会生成一对一的关系.

这个想法是一个用户应该能够跟随多个其他用户(想想Twitter).

我的User模型看起来像这样:

public class User
{
    public int UserId { get; set; }
    public string Name { get; set; }
    public DateTime Registered { get; set; }
    ...
    public virtual ICollection<User> Follows { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我支持添加的Follows-property时,我得到这样的迁移:

public partial class FollowUser : DbMigration
{
    public override void Up()
    {
        AddColumn("User", "User_UserId", c => c.Int());
        AddForeignKey("User", "User_UserId", "User", "UserId");
        CreateIndex("User", "User_UserId");
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,实体框架将我的模型解释为两个用户之间的一对一关系.

如何在相同类型的实体之间创建多对多关系?

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

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

实体框架中的单向一对一关系

下面的一对一关系示例抛出异常

public class User
{
    public int Id { get; set; }
    public Address Address { get; set; }
}

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

例外说:

无法确定类型"ConsoleApplication1.Address"和"ConsoleApplication1.User"之间关联的主要结束.必须使用关系流畅API或数据注释显式配置此关联的主要结尾.

如果我从地址中删除用户属性但我不想要它.

我怎么能有这样的关系,没有例外?

.net c# ef-code-first entity-framework-4.3

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

EF Code First,从多对多关系中公开链接表/对象?

我试图公开EF代码首先在多对多关系中自动创建的链接类作为单独的对象,因为该链接对象需要在其他类中引用,但是我似乎遇到了获取存在于其他类中的数据的问题.数据库.

我有以下3个对象:

 public class Role : Entity
{
    public virtual ICollection<User> Users { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Permission> Permissions { get; set; }
}

public class User: Entity
{
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<Role> Roles { get; set; }
 }

 public class …
Run Code Online (Sandbox Code Playgroud)

c# many-to-many entity-framework ef-code-first

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

如何在EntityFramework中更改自动生成的"Discriminator"列?

我正在研究一些通过EF4.3使用单表继承的代码.

有一个名为User的实体和另一个名为Admin的实体.Admin继承自用户.

用户类

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

管理员班

public class Admin : User { }
Run Code Online (Sandbox Code Playgroud)

EF使用Discriminator列生成数据库表.当Admin添加记录,然后Discriminator="Admin"和用户记录将有Discriminator="User".

我的问题是,Discriminator如果我想User进入并且如何更新列Admin

我尝试从一种对象类型转换到另一种对象类型并使用EF保存.但这不会改变Discriminator列.我该如何改变它?

谢谢你的帮助.

entity-framework ef-code-first

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

实体框架代码优先:"在模型中找不到指定的表'foo'."

以前没见过这个错误,粗略的网页搜索很少见.这是(我认为)有问题的代码:

this.HasMany(a => a.ListItems).WithRequired()
    .Map(m =>
        {
            m.MapKey("AttributeId");
            m.ToTable("ProductAttributeListItem");
        }
    )
;
Run Code Online (Sandbox Code Playgroud)

这是完整的错误:

在模型中找不到指定的表'ProductAttributeListItem'.确保已正确指定表名.

桌子在那里拼写正确.

缺乏搜索结果让我觉得我错过了一些明显的东西.可能是什么?

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

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

具有多对多未加载集合属性的实体

我有一个实体名册,有一系列球员.

public class Roster
{
    public Roster()
    {
        Players = new List<Player>();
    }

    public int RosterId { get; set; }

    [MaxLength(100)]
    [Required]
    public string RosterName { get; set; }

    public ICollection<Player> Players { get; set; }
}
public class Player
{
    public int PlayerId { get; set; }
    [MaxLength(100)]
    [Required]
    public string PlayerName { get; set; }
    public virtual ICollection<Roster> Rosters { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我使用流畅的api定义了这种关系

// many to many Roster - Players
modelBuilder.Entity<Roster>()
.HasMany(t => t.Players)
.WithMany(t=>t.Rosters)
.Map(m …
Run Code Online (Sandbox Code Playgroud)

c# many-to-many entity-framework ef-code-first entity-framework-4.3

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

生成DbContext后如何修改数据库?

现在我已经通过以下方式从现有数据库生成了19个代码优先类:

  • 创建模型优先实体,并选择"从数据库生成"
  • 右键单击并选择"添加代码生成项"
  • EF 4.x DbContext Generater

我想要的所有课程都已生成,我对他们非常满意......

现在我的问题

  • 为什么它们都是生成的.cs文件嵌套在密封的.tt集合中?
  • 为什么我不能将它们复制粘贴到我喜欢的任何文件夹中,并像普通类一样对待它们?
  • 它只是我,或者当你这样做时,你是否无法使用迁移"update-database"?

我想我的整体问题是,为什么它们位于.tt文件夹中?我现在该如何更新我的数据库?通过手动编辑数据库然后更新Model,然后再次生成dbContext?或者是否有从.tt文件夹中获取.cs文件的技巧?

如何修改你的数据库生成您的DbContext后?

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

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

如何首先使用EF代码通过where子句进行查询

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

我定义了这个类.我首先使用代码EF.

public class FooContext : DbContext {
    public DbSet<User> Users { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

所以当我做以下事情时:

db.Users.ToList().where(x=>x.ExternalId == externalId);
Run Code Online (Sandbox Code Playgroud)

我很好奇,如果这样做:

select whatever from Users where ExternalId = 'id I passed in';
Run Code Online (Sandbox Code Playgroud)

或者它将所有用户加载到内存并在内存中执行Linq?

查询具有条件(where子句)的表的最佳实践是什么?

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

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

类型'System.ObjectDisposedException'的异常

我有以下EF代码的第一个代码.它工作正常.但当我寻找'club2.Members'的价值时,它会说:

'club2.Members'抛出了'System.ObjectDisposedException'类型的异常.

消息是:

ObjectContext实例已被释放,不能再用于需要连接的操作.

我没有为Members属性设置值.没关系.但是它不应该在内部引起任何异常.

  1. 有没有办法克服这个例外?
  2. 删除此异常是否有助于提高性能?
  3. 为什么这个异常不会导致程序执行终止?

注意:我不需要俱乐部实体中的会员数据(在我打电话的时候).即使当时没有成员加入俱乐部.我只需要摆脱异常; 不使用预先加载来加载数据.如何避免异常

在此输入图像描述

namespace LijosEF
{

public class Person
{
    public int PersonId { get; set; }
    public string PersonName { get; set; }
    public virtual ICollection<Club> Clubs { get; set; }
}

public class Club 
{
    public int ClubId { get; set; }
    public string ClubName { get; set; }
    public virtual ICollection<Person> Members { get; set; }

}




//System.Data.Entity.DbContext is from EntityFramework.dll
public class NerdDinners : System.Data.Entity.DbContext
{

    public …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework ef-code-first

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

如何在TPH TPT对象之间映射外键 - 实体框架代码优先

我们有以下一组对象.

public class Form
{
    public int FormId { get; set; }
    public DateTime DateCreatedOn { get; set; }
    public string Status { get; set; }
}

// This is using TPT inheritance from Form
[Table("FormA")]
public class FormA : Form
{
    public string ExtraInfoA { get; set; }
    public virtual ICollection<Child> Children
}

// This is using TPT inheritance from Form
[Table("FormB")]
public class FormB : Form
{
    public string ExtraInfoB { get; set; }
    public virtual ICollection<Adult> Adults …
Run Code Online (Sandbox Code Playgroud)

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

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