Вы должны быть осторожны с форматами m / d / Y и m-d-Y. PHP считает, что /
означает, что m / d / Y и -
означают d-m-Y. Я бы явно описал формат ввода в этом случае:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
Таким образом, вы не находитесь в капризе определенной интерпретации.
После проверки исходного кода в GitHub я могу с достаточной уверенностью сказать, что в EF Core нет такого понятия, как множественность.
Я создал перечисление, подобное используемому .net Framework 3.5+ (см .: Официальная документация ):
public enum RelationshipMultiplicity
{
Many = 2,
One = 1,
ZeroOrOne = 0
}
А затем метод расширения, который позволяет получать все свойства навигации с использованием перечисление как фильтр. Ключевые вещи, которые я использовал:
Метод позволяет получить все свойства Navigations по типу отношения
public static class ModelExtensions
{
/// <summary>
/// Extension method used to get from the entity all navigation properties by multiplicity
/// </summary>
/// <typeparam name="T">Entity from where the navigation properties are taken</typeparam>
/// <param name="model">Context Model</param>
/// <param name="multiplicity">Type of multiplicity to use</param>
/// <returns>List of PropertyInfo of Navigation Properties</returns>
public static IEnumerable<PropertyInfo> GetNavigationProperties<T>(this IModel model, RelationshipMultiplicity multiplicity)
{
var navigations = model.GetEntityTypes().FirstOrDefault(m => m.ClrType == typeof(T))?.GetNavigations();
var properties = new List<PropertyInfo>();
switch (multiplicity)
{
case RelationshipMultiplicity.Many | RelationshipMultiplicity.ZeroOrOne:
return navigations?
.Select(nav => nav.PropertyInfo);
case RelationshipMultiplicity.Many:
return navigations?
.Where(nav => nav.IsCollection())
.Select(nav => nav.PropertyInfo);
case RelationshipMultiplicity.One:
return navigations?
.Where(nav => !nav.IsCollection() && nav.ForeignKey.IsRequired)
.Select(nav => nav.PropertyInfo);
case RelationshipMultiplicity.ZeroOrOne:
return navigations?
.Where(nav => !nav.IsCollection())
.Select(nav => nav.PropertyInfo);
default:
return null;
}
return properties;
}
}
Пример использования:
var oneToManyRelations = _context.Model.GetNavigationProperties<Transaction>(
RelationshipMultiplicity.ZeroOrOne);
var manyToOneRelations = _context.Model.GetNavigationProperties<Transaction>(
RelationshipMultiplicity.Many);
var allRelations = _context.Model.GetNavigationProperties<Transaction>(
RelationshipMultiplicity.Many |
RelationshipMultiplicity.ZeroOrOne);