C# 实体框架4.0 CTP5一对一映射
您好,我正在使用CTP5在两个实体之间进行映射,如下所示:C# 实体框架4.0 CTP5一对一映射,c#,entity-framework-4,code-first,C#,Entity Framework 4,Code First,您好,我正在使用CTP5在两个实体之间进行映射,如下所示: public class User { public int Id { get; set; } public string UserName { get; set; } public string Password { get; set; } public bool IsManager { get; set; } public decimal Credit { get; set; } p
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public bool IsManager { get; set; }
public decimal Credit { get; set; }
public int CreditAlertCount { get; set; }
public decimal TelPrice { get; set; }
public decimal CellPrice { get; set; }
public DateTime InsertDate { get; set; }
public IList<string> PhoneList { get; set; }
public int UserTypeId { get; set; }
public virtual UserType UserType { get; set; }
}
public class UserType
{
public int Id { get; set; }
public int UserLevel { get; set; }
public string TypeDescription { get; set; }
}
公共类用户
{
公共int Id{get;set;}
公共字符串用户名{get;set;}
公共字符串密码{get;set;}
公共bool IsManager{get;set;}
公共十进制信用{get;set;}
public int CreditAlertCount{get;set;}
公共十进制TelPrice{get;set;}
公共十进制单元格价格{get;set;}
公共日期时间插入日期{get;set;}
公共IList电话列表{get;set;}
public int UserTypeId{get;set;}
公共虚拟用户类型用户类型{get;set;}
}
公共类用户类型
{
公共int Id{get;set;}
公共int用户级别{get;set;}
公共字符串TypeDescription{get;set;}
}
//这里是配置
public class UserConfig : EntityTypeConfiguration<User>
{
public UserConfig()
{
HasKey(c => c.Id);
Property(c => c.Id).HasDatabaseGenerationOption(DatabaseGenerationOption.Identity).HasColumnName("ID");
Property(c => c.InsertDate).HasDatabaseGenerationOption(DatabaseGenerationOption.Computed).HasColumnName("INSERT_DATE");
Property(c => c.IsManager).HasDatabaseGenerationOption(DatabaseGenerationOption.Computed).HasColumnName("IS_MANAGER");
Property(c => c.UserName).HasMaxLength(25).IsRequired().HasColumnName("USER_NAME");
Property(c => c.Password).HasMaxLength(25).IsRequired().HasColumnName("USER_PASSWORD");
Property(c => c.CellPrice).IsRequired().HasColumnName("CELL_PRICE");
Property(c => c.TelPrice).IsRequired().HasColumnName("TEL_PRICE");
Property(c => c.CreditAlertCount).IsRequired().HasColumnName("CREDIT_ALERT_COUNT");
Property(c => c.Credit).IsRequired().HasColumnName("CREDIT");
Property(c => c.UserTypeId).IsOptional().HasColumnName("USER_TYPE_ID");
/*relationship*/
HasRequired(p => p.UserType).WithMany().IsIndependent().Map(m => m.MapKey(p => p.Id, "USER_TYPE_ID"));
ToTable("CRMC_USERS", "GMATEST");
}
}
public class UserTypeConfig : EntityTypeConfiguration<UserType>
{
public UserTypeConfig()
{
/*Identity*/
HasKey(c => c.Id);
Property(c => c.Id).HasDatabaseGenerationOption(DatabaseGenerationOption.Identity).HasColumnName("ID");
/*simple scalars*/
Property(s => s.TypeDescription).IsRequired().HasColumnName("DESCRITPION");
Property(s => s.UserLevel).IsRequired().HasColumnName("USER_LEVEL");
ToTable("CRMC_USER_TYPES", "GMATEST");
}
}
public类UserConfig:EntityTypeConfiguration
{
公共用户配置()
{
HasKey(c=>c.Id);
属性(c=>c.Id).HasDatabaseGenerationOption(DatabaseGenerationOption.Identity).HasColumnName(“Id”);
属性(c=>c.InsertDate).HasDatabaseGenerationOption(DatabaseGenerationOption.Computed).HasColumnName(“插入日期”);
属性(c=>c.IsManager).HasDatabaseGenerationOption(DatabaseGenerationOption.Computed).HasColumnName(“IS_管理器”);
属性(c=>c.UserName).HasMaxLength(25).IsRequired().HasColumnName(“用户名”);
属性(c=>c.Password).HasMaxLength(25).IsRequired().HasColumnName(“用户密码”);
属性(c=>c.CellPrice).IsRequired().HasColumnName(“CELL_PRICE”);
属性(c=>c.TelPrice).IsRequired().HasColumnName(“电话价格”);
属性(c=>c.CreditAlertCount).IsRequired().HasColumnName(“信用警报计数”);
属性(c=>c.Credit).IsRequired().HasColumnName(“Credit”);
属性(c=>c.UserTypeId).IsOptional().HasColumnName(“用户类型ID”);
/*关系*/
HasRequired(p=>p.UserType).WithMany().IsIndependent().Map(m=>m.MapKey(p=>p.Id,“USER\u TYPE\u Id”);
ToTable(“CRMC_用户”、“GMATEST”);
}
}
公共类UserTypeConfig:EntityTypeConfiguration
{
公共UserTypeConfig()
{
/*身份*/
HasKey(c=>c.Id);
属性(c=>c.Id).HasDatabaseGenerationOption(DatabaseGenerationOption.Identity).HasColumnName(“Id”);
/*简单标量*/
属性(s=>s.TypeDescription).IsRequired().HasColumnName(“Description”);
属性(s=>s.UserLevel).IsRequired().HasColumnName(“用户级别”);
ToTable(“CRMC用户类型”、“GMATEST”);
}
}
我的User.UserType=null有什么错
我该怎么把它映射到工作上
我要死在这里三天来解决这个问题
我正在使用DevArt连接6.058。。。一些东西
Oracle 10g,C#EntityFramework 4.0您已经在用户和用户类型之间设置了所需的关联,因此您不能拥有没有用户类型的用户对象(即User.UserType==null)。要做到这一点,您需要对对象模型和fluent API进行2项更改:
1.将UserTypeId
属性的类型更改为int?
:
public int? UserTypeId { get; set; }
2.从fluent API中删除以下代码:
HasRequired(p=>p.UserType).WithMany().IsIndependent().Map(m=>m.MapKey…
您不需要任何这些东西。所有内容都将首先根据约定由代码进行配置。您已经在用户和用户类型之间设置了所需的关联,因此您不能拥有没有用户类型的用户对象(即User.UserType==null)。要做到这一点,您需要对对象模型和fluent API进行2项更改:
1.将UserTypeId
属性的类型更改为int?
:
public int? UserTypeId { get; set; }
2.从fluent API中删除以下代码:
HasRequired(p=>p.UserType).WithMany().IsIndependent().Map(m=>m.MapKey…
您不需要任何这些东西。所有东西都将首先根据约定由代码为您配置。您好,谢谢您的回答,但由于某些原因,它不起作用。由于某些原因,当我包含时,它确实会生成正确的查询以检索正确的实体,但当我执行简单的FindById(int-id)时它失败并返回UserType==null。很抱歉评论太晚。您好,我已经通过添加((IObjectContextAdapter)this)解决了这个问题.ObjectContext.ContextOptions.ProxyCreationEnabled=true;非常感谢您的回答,您能给我介绍一下您写的关于映射问题的博客吗?当然可以,但首先我需要了解您的问题。请显示您现在可以使用的更新解决方案。ProxyCreationEnabled标志默认设置为true,因此我不是s您知道这是如何解决您的问题的。我已将此项设置为false,不希望启用代理。您好,谢谢您的回答,但由于某些原因,它不起作用。由于某些原因,当我包含时,它确实会生成正确的查询以检索正确的实体,但当我执行简单的FindById(int-id)时它失败并返回UserType==null。很抱歉评论太晚。您好,我已经通过添加((IObjectContextAdapter)this)解决了这个问题.ObjectContext.ContextOptions.ProxyCreationEnabled=true;非常感谢您的回答,您能给我介绍一下您写的关于映射问题的博客吗?当然可以,但首先我需要了解您的问题。请显示您现在可以使用的更新解决方案。ProxyCreationEnabled标志默认设置为true,因此我不是s你知道这是如何解决你的问题的。我已经将这个设置为false,不希望启用代理。