我正在尝试映射一个包含来自两个不同数据库表的项目的模型。我有两个表(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我无法工作。
我正在尝试做的似乎很简单,但出于某种原因努力寻找有关如何实施的好文档。
谢谢!
答案 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/
希望这有帮助,