我知道这个问题已经有了解决方案(例如这个问题 https://stackoverflow.com/questions/3577891/entity-framework-ctp4-code-first-mapping-protected-properties)但我真的无法将映射逻辑附加到域(POCO 类)所在的同一程序集中。
还有其他办法吗?
我找到了这个不错的博文 http://daniel.wertheim.se/2009/11/10/entity-framework-4-relationships-between-non-public-members/但我无法让它工作。
这是模型:
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
抛出异常。
系统类型初始化异常:
系统类型初始化异常:
类型初始值设定项
'Studentum.Core.FluentCoreRepositoryFactory'
抛出异常。 --->
System.InvalidOperationException:
配置属性
“InnerInstituteTexts”不是
实体的申报财产
'研究所'。验证它没有
被明确排除在外
模型并且它是一个有效的原语
财产..