C# 实体框架4.0 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

您好,我正在使用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; }
    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,不希望启用代理。