1

我正在尝试映射一个模型,该模型具有来自两个不同数据库表的项目。我有两个表(aspnet_Users && aspnet_Membership)。我想制作一个包含两者字段的模型。我的问题是设置它。

似乎我需要在我的 DbContext 中添加我的“OnModelCreating”覆盖,但无法弄清楚需要去哪里。

这是我的模型:

 [Table("aspnet_Users")]
 public class ApplicationUser : Base, IApplicationUser
 {
        [Key]
        public Guid UserId { get; set; }
        public string UserName { get; set; }
        public DateTime LastActivityDate { get; set; }

        public ApplicationUser_Details UserDetails { get; set;}
 }

 [Table("aspnet_Membership")]
 public class ApplicationUser_Details : Base
 {
    [Key]
    public Guid UserId { get; set; }
    public string Email { get; set; }
 }

我正在尝试遵循 Scott Gu 网站上的指南(http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping .aspx - 第 3 节),但如果 EF4.3,我无法让它工作。

我正在尝试做的事情似乎很简单,但出于某种原因,很难找到关于如何实施的好的文档。

谢谢!

4

3 回答 3

0

首先,您可能不应该直接访问 asp.net 表。如果可以,请使用内置提供程序。

其次,我发现从长远来看,保持实体与表结构完全相同会简单得多。如果您需要在应用程序中以不同方式表示数据,请创建一个特定于应用程序的模型。您可以使用AutoMapper帮助从实体映射到模型。

什么是 AutoMapper?

AutoMapper 是一个简单的小库,旨在解决一个看似复杂的问题——摆脱将一个对象映射到另一个对象的代码。这种类型的代码写起来相当枯燥乏味,那么为什么不发明一个工具来为我们做呢?

我该如何开始?

查看入门指南。完成后,wiki 会详细介绍细节。最后,查看dnrTV 剧集以获得完整的演练。

于 2012-04-20T19:42:33.317 回答
0

您不需要在 EF 4.3 中自己进行任何外部实体映射。只需确保连接实体的两侧都有相互对应的引用。方程。类别实体具有食品实体集合的属性,每个食品实体都具有单个类别的属性。也不需要指定表名。在您基于 Category - Food 示例设置关系后,不要忘记,您还需要处理来自添加和删除等操作的双方的关系。

于 2012-04-20T19:55:09.660 回答
0

如果您想映射到现有的成员资格表(如果我很好地理解您想要什么),您可以做这样的事情......
(注意:我有点无视“基础”类,因为我看不到目的为此,您可以拥有一个基类,但它会使事情变得有点复杂,所以这不是“涵盖”。也不确定“包含两者的字段”是什么意思,这会将 2 个表映射到 2 个类,正如您所布置的)

[Table("aspnet_Users")]
public class ApplicationUser // : Base, IApplicationUser
{
    //[Key]
    //[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Computed)]
    public Guid UserId { get; set; }
    public string UserName { get; set; }
    public DateTime LastActivityDate { get; set; }
    public ApplicationUser_Details UserDetails { get; set; }
}

[Table("aspnet_Membership")]
public class ApplicationUser_Details // : Base
{
    //[Key]
    public Guid UserId { get; set; }
    public string Email { get; set; }
    public ApplicationUser User { get; set; }
}

...在你的OnModelCreating()...

modelBuilder.Entity<ApplicationUser>()
    .HasKey(x => new { x.UserId });

//modelBuilder.Entity<ApplicationUser>()
//    .Property(x => x.UserId)
//    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

modelBuilder.Entity<ApplicationUser_Details>()
    .HasKey(x => new { x.UserId });

modelBuilder.Entity<ApplicationUser_Details>()
    .HasRequired(i => i.User)
    .WithRequiredDependent(i => i.UserDetails);

...这应该创建正确的关系(1 对 1),FK 也是 PK(关于细节)。

不过,如果您只想在 MVC 或类似中使用会员表 - 这可能更容易......
http://codefirstmembership.codeplex.com/

希望这可以帮助,

于 2012-04-20T22:33:20.490 回答