我正在使用EF和.net 4.5.2开展MVC odata服务。
此服务(Product)的主要实体映射到只有Ids和Names的Product表。然后,我将属性存储在一个单独的表中,其中包含以下列:ProductId,AttributeCd,AttributeValue,如网络模型中所示。
我向我的产品实体添加了一个属性,该属性是由ProductId映射的属性集合。
当我调用该服务时,我可以选择$扩展这些属性,以向我显示每个产品所关联的属性。
到目前为止,一切都很好,但是当我收到json格式的返回数据时,我首先看到扩展属性,最后看到ProductId,ProductNm,尽管这些是在我的实体中反过来声明的。
我有没有办法告诉EF(模型构建器,实体集)我想要在Json中每个ProductId底部显示的那些属性?因为默认情况下没有这样做。
此代码:
产品实体:
public class Product
{
public Product()
{
this.Entities = new HashSet<Attribute>();
}
public Product(int id)
{
ProductId = id;
}
public int ProductId { get; set; }
public string ProductName { get; set; }
public virtual ICollection<Attribute> Attributes { get; set; }
}
}
属性实体:
public class Attribute
{
public Attribute()
{
}
public Attribute(int pid, string attributecd, string attributevalue)
{
ProducId = pid;
AttributeCode = attributecd;
AttributeValue = attributevalue;
}
public int ProductId { get; set; }
public virtual Product product { get; set; }
public string AttributeCode { get; set; }
public string AttributeValue { get; set; }
}
}
产品图谱:
public class ProductMapping : EntityTypeConfiguration<Product>
{
public ProductMapping()
{
this.ToTable("dbo.Products");
this.HasKey(p => p.ProductId);
this.Property(p => p.ProductId)
.IsRequired()
.HasColumnName("ProductId")
.HasColumnType("int");
this.Property(p => p.ProductName)
.IsRequired()
.HasColumnName("ProductNm")
.HasColumnType("varchar")
.HasMaxLegnth(150);
this.HasMany(a => a.Attributes)
.WithRequired(p => p.product)
.HasForeignKey(t => t.ProductId);
}
}
属性映射仅具有ToTable,HasKey和列名称/类型映射。
我的控制器只对entitySet有一个简单的查询,其中productId = productId输入并返回实体产品的IQueryable。
任何帮助将不胜感激!