1

我有两个实体:

public class User 
{
   public int Id { get; set; }
   public string UserName { get; set; }
}

public class Product 
{
   public int Id { get; set; }
   public string Name { get; set; }
   public string CreatedUserName { get; set }
}

我的数据库模式在Products表中包含一个指向表中Id列的外键Products。我需要一种方法来告诉实体框架导航外键并获取属性UserName列的值。CreatedUserName

这可能吗?我不希望产品拥有整个用户实体。

谢谢!

4

2 回答 2

3

我正在研究同样的事情,发现了一种称为“实体拆分”的技术 http://www.deliveron.com/blog/post/Entity-Splitting-in-Code-First-Entity-Framework.aspx

因此,根据您的代码,您可以执行以下操作:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        // Map to the Product table
        .Map(map =>
        {
            map.Properties(p => new {
                p.Id,
                p.Name
            });

            map.ToTable("Product");
        })
        // Map to the User table
        .Map(map =>
        {
            map.Properties(p => new {
                p.CreatedUserName
            });

            map.ToTable("User");
        });
}
于 2015-01-23T15:17:04.563 回答
1

这可能吗?我不希望产品拥有整个用户实体。

不,除非你想为你的产品做一个数据库视图。您尝试映射的不再是真实实体。它更像是一个视图模型,那么为什么不使用投影呢?

var productView = context.Products
                         .Where(p => p.Id == ...)
                         .Select(p => new ProductView {
                             Id = p.Id,
                             Name = p.Name,
                             CreatedUserName = p.User.UserName
                         });
于 2012-12-04T10:51:02.683 回答