将多列故障转移逻辑组合到Entity Framework 4.1中的单个属性中

时间:2011-07-07 08:51:07

标签: c# asp.net-mvc-3 entity-framework-4.1

我正在研究一个遗留企业数据库,该数据库使用多列来检索我们当前使用的sql的部件号检查部件号,如果部件号为null,则检查子部件号是什么样的最佳方式将此逻辑组合成单个ef模型属性(例如Product.PartNumber)

我希望这是不可见的,这样只有PartNumber可以在数据api外部看到

2 个答案:

答案 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,可以使用DefiningQueryQueryView,但整个新实体将只读。有关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);
    }
}

或者这仍然被认为是坏的