模型类:
public class User {
[Key]
public Guid UserId { get; set; }
[Display(Name = "User Name")]
public string UserName { get; set; }
public virtual ICollection<Asp_Membership> CreateDates { get; set; }
}
public class Asp_Membership {
[Key]
public Guid UserId { get; set; }
[Display(Name = "Date Created")]
public DateTime CreateDate { get; set; }
}
的DbContext
public class UsersContext : DbContext {
public UsersContext() : base("ApplicationServices") { }
public DbSet<User> Users { get; set; }
public DbSet<Asp_Membership> Asp_Memberships { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
//mapping of Users and Membership
//what exactly do i put here to join the two tables by UserId
}
我的问题很简单,你可能会说,这是我第一次试图了解EF的实际运作方式。我想要做的是加入基于UserId的aspnet_Users表和aspnet_Membership表。我怎么能这样做?
但更重要的是,我真的无法找到一个好的实体框架教程,任何建议?
- UPDATE -
DbContext (与上述相同)
模特课程:
public class User {
[Key]
public Guid UserId { get; set; }
[Display(Name = "User Name")]
public string UserName { get; set; }
public virtual Asp_Membership asp_Membership { get; set; }
}
public class Asp_Membership {
[Key]
public Guid UserId { get; set; }
[Display(Name = "Date Created")]
public DateTime CreateDate { get; set; }
}
控制器:
private UsersContext db = new UsersContext();
// GET: /Users/Index
public ActionResult Index() {
return View(db.Users.ToList());
}
索引页面(删除了不必要的元素......)
@model IEnumerable<ReservationPro.Models.User>
...
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.asp_Membership.CreateDate)
</td>
</tr>
}
我想要做的就是弄清楚如何从默认的aspnetdb加入两个单独的表'aspnet_Users'和'aspnet_Membership'。如模型类中所述,它们都有“UserId”列。我知道这是一个简单的问题,我很抱歉这令人困惑。你可以说,我刚刚开始使用EF,并且只是想用一些简单的代码来弄脏手。
答案 0 :(得分:1)
你快到了。试试这个:
public class User {
[Key]
public Guid UserId { get; set; }
[Display(Name = "User Name")]
public string UserName { get; set; }
public virtual Asp_Membership asp_membership { get; set;}
}
public class Asp_Membership {
[Key]
public Guid UserId { get; set; }
[Display(Name = "Date Created")]
public DateTime CreateDate { get; set; }
public virtual User user { get; set;}
}
通过这种方式,您可以在任一方向上从一个访问另一个。如果你只想在一个方向上,只需将它放在你想要访问另一个的类中。此外,这假设关系是1比1.从你的问题中很难说出来。
答案 1 :(得分:1)
使用UPDATE中的模型类,您可以尝试此映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasOptional(u => u.asp_membership)
.WithRequired();
}
映射意味着用户可以拥有成员资格(不超过一个),但不是必需的(HasOptional
/ 0..1
)。另一方面,成员资格必须只有一个相关用户(WithRequired
/ 1
)。
在ASP.NET成员资格表中,User
表表示具有关系主键的主体,Membership
表是与外键相关的表。但是外键是同时UserId
表的主键(Membership
)。因此,这种关系是共享的主键一对一关系。您必须使用上面的映射明确定义它,否则默认情况下EF会推断出模型中的一对多关系。