我还有一个关于EF4的问题:)抱歉,我在网上找不到任何东西。实体框架4.0 CTP5多对多关系附带帮助表?
问题是我使用CTP5 Code Only来映射(多对多),我该怎么做?
但我做旧时尚的方式,我的意思是我有三个表:
- 用户
- 公司。
- UsersToCompanies - >(用户ID,CompanyId)
如何映射这一点,就会非常感激如果你想从POCO的 告诉我的代码示例它,映射。
这是我收到的错误...
This is my entities
public class User
{
public int UserId { get; set; }
public int? UserRoleId { get; set; }
public string UserName { get; set; }
public string UserPassword { get; set; }
public DateTime InsertDate { get; set; }
public virtual UserRole UserRole { get; set; }
//this is my many to many prop
public virtual ICollection<Company> Companies { get; set; }
}
public class Company
{
public int CompanyId { get; set; }
public string CompanyNameHe { get; set; }
public string CompanyNameEn { get; set; }
public string CompanyParent { get; set; }
public DateTime InsertDate { get; set; }
//this is my many to many prop
public virtual ICollection<User> Users { get; set; }
}
/*relationship map*/
public class UsersCompanies
{
public int Id { get; set; }
public int UserId { get; set; }
public int CompanyId { get; set; }
}
//mapping
public class CompanyMap : BaseConfig<Company>
{
public CompanyMap()
{
/*Identity*/
HasKey(c => c.CompanyId);
Property(c => c.CompanyId).HasDatabaseGenerationOption(DatabaseGenerationOption.Identity).HasColumnName("COMPANY_ID");
/*Have default values*/
Property(c => c.InsertDate).HasDatabaseGenerationOption(DatabaseGenerationOption.Computed).HasColumnName("INSERT_DATE");
/*simple scalars*/
Property(c => c.CompanyNameHe).HasMaxLength(32).IsRequired().HasColumnName("COMPANY_NAME_HE");
Property(c => c.CompanyNameEn).HasMaxLength(32).IsRequired().HasColumnName("COMPANY_NAME_EN");
Property(c => c.CompanyParent).HasMaxLength(32).IsRequired().HasColumnName("COMPANY_PARENT");
ToTable("CMS_COMPANY", "GMATEST");
}
}
public class UserMap : BaseConfig<User>
{
public UserMap()
{
/*Identity*/
HasKey(c => c.UserId);
Property(c => c.UserId).HasDatabaseGenerationOption(DatabaseGenerationOption.Identity).HasColumnName("USER_ID");
/*Have default values*/
Property(c => c.InsertDate).HasDatabaseGenerationOption(DatabaseGenerationOption.Computed).HasColumnName("INSERT_DATE");
/*simple scalars*/
Property(c => c.UserName).HasMaxLength(25).IsRequired().HasColumnName("USER_NAME");
Property(c => c.UserPassword).HasMaxLength(25).IsRequired().HasColumnName("USER_PASSWORD");
Property(c => c.UserRoleId).IsRequired().HasColumnName("USER_ROLE_ID");
/*relationship*/
HasRequired(u => u.UserRole).WithMany().HasForeignKey(t => t.UserRoleId);
HasMany(p => p.Companies).WithMany(c => c.Users).Map(mc =>
{
mc.ToTable("UsersCompanies");
mc.MapLeftKey(p => p.UserId, "CompanyId");
mc.MapRightKey(c => c.CompanyId, "UserId");
});
ToTable("CMS_USERS", "GMATEST");
}
}
public class UsersCompaniesMap : BaseConfig<UsersCompanies>
{
public UsersCompaniesMap()
{
/*Identity*/
HasKey(k => k.Id);
Property(c => c.Id).HasDatabaseGenerationOption(DatabaseGenerationOption.Identity).HasColumnName("ID");
Property(c => c.UserId).IsRequired().HasColumnName("USER_ID");
Property(c => c.CompanyId).IsRequired().HasColumnName("COMPANY_ID");
ToTable("CMS_USERS_TO_COMPANIES", "GMATEST");
}
}
这里的错误,我得到:
“((新 系统。 Linq.SystemCore_EnumerableDebugView(ctx.FindAll() 。))的项目[0])公司 投掷类型的异常 'System.Data.EntityCommandExecutionException'
内部异常:ORA-00942:表或 视图不存在
请不要添加一个答案,以添加内容到您的问题。您可以使用[编辑](http://stackoverflow.com/posts/5210506/edit)链接来执行此操作。您也可以在您自己的问题(任何问题/答案在50代表)的问题留下意见,以通知人们的更新。 – Will 2011-03-07 13:00:19
另外,你对Oracle使用这个吗?啊。从例外情况可以明显看出,您添加的内容几乎都不会对您的问题有用。你有连接/数据库/安全问题。您需要对连接字符串和数据库进行双倍和三倍检查。另外,[看到这个问题](http://stackoverflow.com/questions/189557/ora-00942-table-or-view-does-not-exist-how-do-i-find-which-table-or-视图-IT-是);它是Java,但同样的错误。如果您使用的是SQL Server,我会告诉您启动Profiler并观察连接和查询;不知道oracle的等价物。 – Will 2011-03-07 13:06:15
我不认为这是一个Oracle问题,它更多的是一个不正确的配置 – IamStalker 2011-03-07 14:48:03