i am working on a legacy enterprise database that uses multiple columns to retrieve a part number the sql we currently use checks for a part number and if the part number is null then checks for the child part number what would be the best way of combining this logic into a single ef model property (eg Product.PartNumber )
I would like this to be invisible as possible so that only Par开发者_如何学GotNumber is visible externally to the data api
If you are using code-first approach the only way is to do a projection in custom linq-to-entities query:
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
});
If you are using EDMX you can use DefiningQuery
or QueryView
but whole your new entity will be readonly. More about those in another answer.
in theory couldnt you do something like this
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);
}
}
or is this still considered bad
精彩评论