Entity Framework 4.0 CTP5 сопоставление один-к-одному - PullRequest
2 голосов
/ 24 января 2011

Привет, я использую 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; }
}

// Вот настройки

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");
    }
}

Что я делаю не так??

Как, черт возьми, я сопоставляю это с работой?.. что-то Oracle 10g, C # EntityFramework 4.0

1 Ответ

0 голосов
/ 24 января 2011

Вы установили обязательную связь между User и UserType, поэтому вы не можете иметь объект User без UserType (т.е. User.UserType == null). Чтобы сделать это, вам нужно внести 2 изменения в вашу объектную модель и свободный API:

1. Измените тип свойства UserTypeId на int?:

public int? UserTypeId { get; set; }

2.Удалите код из вашего свободного API, который гласит: HasRequired(p => p.UserType).WithMany().IsIndependent().Map(m => m.MapKey...

Тебе эти вещи не нужны. Все будет настроено Code First на основе соглашения для вас.

...