Я знаю, что у вопроса уже есть решение (например, этот вопрос), но я действительно не могу позволить себе привязать логику сопоставления в той же сборке, где домен (Классы POCO).
Есть ли другой способ?
Я нашел этот хороший пост в блоге, но я не мог заставить его работать. Вот модель:
public class Institute
{
/**
Code omitted
**/
protected virtual ICollection<InstituteText> InnerInstituteTexts { get; set; }
private InstituteTextSet _TextSets;
public InstituteTextSet Texts
{
get
{
if (_TextSets == null)
_TextSets = new InstituteTextSet(InnerInstituteTexts);
return _TextSets;
}
}
}
Код отображения:
var instituteTextExpression = ObjectAccessor<Institute>.CreateExpression<ICollection<InstituteText>>("InnerInstituteTexts");
institute.HasMany(instituteTextExpression)
.WithRequired()
.HasForeignKey(t => t.InstituteId);
где CreateExpression определяется как:
public static Expression<Func<T, TResult>> CreateExpression<TResult>(string propertyOrFieldName)
{
ParameterExpression param = Expression.Parameter(typeof(T), "propertyOrFieldContainer");
Expression body = Expression.PropertyOrField(param, propertyOrFieldName);
LambdaExpression lambda = Expression.Lambda(typeof(Func<T, TResult>), body, param);
return (Expression<Func<T, TResult>>) lambda;
}
я получаю ошибку:
Метод инициализации Studentum.Core.Tests.InstituteTests.Initialize бросил исключение. System.TypeInitializationException: System.TypeInitializationException: Инициализатор типа для 'Studentum.Core.FluentCoreRepositoryFactory' бросил исключение. --- > System.InvalidOperationException: настроенное свойство "InnerInstituteTexts" не является объявленное свойство на объекте "Институт". Убедитесь, что он не были явно исключены из модели и что это действительный примитив свойство..