EF4.3模型映射到2个db表

时间:2012-04-20 19:18:30

标签: entity-framework

我正在尝试映射一个包含来自两个不同数据库表的项目的模型。我有两个表(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我无法工作。

我正在尝试做的似乎很简单,但出于某种原因努力寻找有关如何实施的好文档。

谢谢!

3 个答案:

答案 0 :(得分:0)

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

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

  

什么是AutoMapper?

     

AutoMapper是一个简单的小型库,用于欺骗性地解决问题   复杂的问题 - 摆脱映射一个对象的代码   另一个。这种类型的代码相当沉闷,写起来很无聊,所以   为什么不为我们发明一个工具?

     

我如何开始使用?

     

查看getting started guide。当你在那里完成时,wiki   深入了解细节。最后,查看dnrTV episode以获取完整的演练。

答案 1 :(得分:0)

您无需在EF 4.3中自行映射任何外部实体。只需确保连接实体的两侧都有相应的引用。式。类别实体具有收集食品实体的财产,每个食品实体具有单一类别的财产。此外,无需指定表名。 在您根据类别建立关系后 - 食物示例不要忘记,您还需要处理双方关于添加和删除等操作的关系。

答案 2 :(得分:0)

如果你想映射到现有的会员表(如果我很清楚你想要的话),你可以做这样的事情......
(注意:我有点无视'Base'类,因为我没有看到它的目的,你可以有一个基类,但它使事情变得复杂,所以不是'覆盖'。也不确定你是什么意思是'包含来自两者的字段',这将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/

希望这有帮助,