我有两个实体:
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
列的值。
这可能吗?我不希望产品拥有整个用户实体。
谢谢!
答案 0 :(得分: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");
});
}
答案 1 :(得分:1)
这可能吗?我不希望产品拥有整个用户实体。
否,除非您要为您的产品执行数据库视图。您尝试映射的内容不再是真实实体。它更像是一个视图模型,为什么不使用投影?
var productView = context.Products
.Where(p => p.Id == ...)
.Select(p => new ProductView {
Id = p.Id,
Name = p.Name,
CreatedUserName = p.User.UserName
});