私はコードファーストで初めてですので、私と一緒に裸にしてください。単純なプロセスを働かせようと一日中私の髪を引っ張った後、私はコミュニティに助けを求めています。ここで私のコレクション/モデルは保存後に見栄えが良いですが、エンティティを読み込むときにデータを取り戻すことはできません。私は間違って何をしていますか?
は私のモデルのための私のソースコードです:
public class User
{
public User()
{
GUID = Guid.NewGuid();
Account = new Account();
Location = new Location();
}
public long UserID { get; set; }
public Guid GUID { get; set; }
public string DisplayName { get; set; }
public Location Location { get; set; }
public virtual Account Account { get; set; }
}
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
HasKey(x => x.UserID);
}
}
[ComplexType]
public class Location
{
[MaxLength(2)]
public string CountryCode { get; set; }
[MaxLength(2)]
public string StateCode { get; set; }
public string City { get; set; }
}
public class Account
{
public Account()
{
if (EmailAddresses == null) EmailAddresses = new Collection<EmailAddress>();
}
[ForeignKey("User")]
public long AccountID { get; set; }
public ICollection<EmailAddress> EmailAddresses { get; set; }
public virtual User User { get; set; }
}
public class AccountConfiguration : EntityTypeConfiguration<Account>
{
public AccountConfiguration()
{
HasKey(x => x.AccountID);
HasMany(x => x.EmailAddresses).WithRequired(x => x.Account);
}
}
public class EmailAddress
{
[Key]
public string Email { get; set; }
public EmailTypes Type { get; set; }
public long AccountID { get; set; }
public virtual Account Account { get; set; }
}
public class EmailAddressConfiguration : EntityTypeConfiguration<EmailAddress>
{
public EmailAddressConfiguration()
{
HasKey(x => x.Email);
HasRequired(x => x.Account).WithMany(x => x.EmailAddresses).HasForeignKey(x => x.AccountID);
}
}
そして、ここでは私のエンティティクラスです:
public class MyEntities : DbContext
{
public MyEntities()
{
Database.SetInitializer<MyEntities>(new DropCreateDatabaseAlways<MyEntities>());
}
public DbSet<User> Users { get; set; }
public DbSet<Account> Accounts { get; set; }
public DbSet<EmailAddress> EmailAddresses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserConfiguration());
modelBuilder.Configurations.Add(new AccountConfiguration());
modelBuilder.Configurations.Add(new EmailAddressConfiguration());
base.OnModelCreating(modelBuilder);
}
}
そして最後に、テストコンソールアプリケーションで実行される私のコード:
static void Main(string[] args)
{
var id = CreateUser();
using (MyEntities db = new MyEntities())
{
var a = db.Users.Find(id);
var b = a.Account.EmailAddresses;
var c = db.Accounts.Find(id);
var d = db.EmailAddresses.Where(x => x.Account.AccountID == id).ToList();
}
}
private static long CreateUser()
{
using (MyEntities db = new MyEntities())
{
var u = new User();
u.DisplayName = "TEST";
u.Location.CountryCode = "US";
u.Location.StateCode = "HI";
u.Location.City = "Kauai";
EmailAddress e = new EmailAddress();
e.Email = DateTime.UtcNow.Ticks + "@microsoft.com";
e.Type = EmailTypes.Current;
u.Account.EmailAddresses.Add(e);
db.Users.Add(u);
var cnt = db.SaveChanges();
// Here I get a return of the 4 entities saved, and my model looks correct.
return u.UserID;
}
}
モデルが保存されると(CreateUser)、モデルをナビゲートでき、すべてが完璧に見えました。
データを引き出すときに問題が発生します。
私の変数:
- 電子メールにナビゲートすると、0レコードが表示されます。
b - これもコレクションに0レコードを示します。
c - 電子メールにナビゲートすると、0件のレコードが表示されます。
D - ここに私が(モデルをナビゲートすることによってではなく)電子メールアドレスを取得することができ
助けてください!
ありがとうございます。 EmailAddressesコレクションにVirtualを追加しましたが、それは何も変わりませんでした。 「Account = new Account();」を削除しました。 – user1265146
@ user1265146:これは、現実的な解決策が 'Account = new Account()' **や 'virtual'コレクションを削除していることを意味していますか?あなたのコードは 'virtual'なしで動作するとは想像もできません。 – Slauma
いいえ、私は "Account = new Account()"を削除し、EmailAddressesにVirtualを追加しました:) – user1265146