我正在研究一个遗留企业数据库,该数据库使用多列来检索我们当前使用的sql的部件号检查部件号,如果部件号为null,则检查子部件号是什么样的最佳方式将此逻辑组合成单个ef模型属性(例如Product.PartNumber)
我希望这是不可见的,这样只有PartNumber可以在数据api外部看到
答案 0 :(得分:0)
如果您使用的是代码优先方法,唯一的方法是在自定义linq-to-entities查询中进行投影:
var products = context.Products
.Select(p => new SomeNonMappedType
{
Id = p.Id,
// All other fields
PartNumber = p.PartNumber ?? p.Child.PartNumber // I hope this will work
});
如果您使用EDMX,可以使用DefiningQuery
或QueryView
,但整个新实体将只读。有关another answer中的内容的更多信息。
答案 1 :(得分:0)
理论上你不能做这样的事情
public class Part
{
public string PartNumber
{
get
{
return this.PartId ?? this.ChildPartId;
}
}
internal string PartId { get; set; }
internal string ChildPartId { get; set; }
}
public class PartsContext : DbContext
{
public DbSet<Part> Parts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Part>().Ignore(e => e.PartNumber);
base.OnModelCreating(modelBuilder);
}
}
或者这仍然被认为是坏的