我正在尝试在Entity Framework 5.0中使用Bounded(Db)上下文,并且我遇到了从特定上下文中包含的某个类中排除属性的问题。这是信息(为简洁起见我会缩短)
BaseContext.cs
public class BaseContext<TContext> : DbContext where TContext : DbContext
{
static BaseContext()
{
Database.SetInitializer<TContext>(null);
}
protected BaseContext()
: base("name=Development")
{
}
}
IContext.cs
public interface IContext : IDisposable
{
int SaveChanges();
void SetModified(object entity);
void SetAdded(object entity);
}
ISuiteContext.cs
public interface ISuiteContext : IContext
{
IDbSet<Organizations> Organizations { get; set; }
...
}
SuiteContext.cs
public class SuiteContext : BaseContext<SuiteContext>, ISuiteContext
{
public IDbSet<Organizations> Organizations { get; set; }
...
...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new OrganizationsConfiguration());
...
...
modelBuilder.Ignore<Colors>();
}
}
Organizations.cs:
public class Organizations
{
public Organizations()
{
Colors = new List<Colors>();
...
...
}
public int Organization_ID { get; set; }
public string Name { get; set; }
public string Address_1 { get; set; }
public string Address_2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public ICollection<Colors> Colors { get; set; }
...
...
}
OrganizationConfiguration.cs:
public class OrganizationsConfiguration : EntityTypeConfiguration<Organizations>
{
public OrganizationsConfiguration()
{
ToTable("Organizations");
HasKey(o => o.Organization_ID);
...
...
HasMany(o => o.Colors);
}
}
我如何使用(Web API测试项目)
public class ValuesController : ApiController
{
private readonly IUnitOfWork _uow;
private readonly IOrganizationRepository _orgRepo;
public ValuesController()
{
_uow = new UnitOfWork<SuiteContext>(new SuiteContext());
_orgRepo = new OrganizationRepository(_uow);
}
// GET api/values
public IEnumerable<Organizations> Get()
{
return _orgRepo.RetrieveAll().AsEnumerable();
}
}
正在发生的异常:
导航属性“Colors”不是声明的属性类型 输入“组织”。确认尚未排除 从模型中,它是一个有效的导航属性
我想要的只是'SuiteContext'可以访问组织,但不能访问子项(颜色和其他一些)
我错过了什么?也许我错误地解释了这个例外?
更新#1
我尝试过(没有成功 - 同样的例外):
modelBuilder.Entity<Organizations>().Ignore(o =>o.Colors);
modelBuilder.Ignore<Colors>();
更新#2
我认为它与OrganizationsConfiguration.cs
类和HasMany()
方法有关。
如果我取出HasMany(o => o.Colors)
,那么我可以按照我想要的方式忽略类/属性。但是,这也会导致数据库创建失败。如果我这样做该死的,如果不这样做该死的!
答案 0 :(得分:1)
看起来你忽略了这个类,但你也需要忽略这个属性。
Ignore(o => o.Colors);
我之前忽略了应用中的标量属性(并且在您看到的视频中做了:)但是没有导航属性,所以我只是测试以确保模型构建器对它感到满意。它是。但是你应该做一些集成测试,以确保它在你的应用程序中按预期工作。
答案 1 :(得分:1)
我知道这是一个老帖子,你可能已经想到了这一点,虽然这可能有助于其他人。 Ignore
在1-1场景中运行良好。 1-Many是问题所在。
在上面的示例中,您需要执行以下操作:
modelBuilder.Ignore<ICollection<Color>>();