Client
もともと、私は次のものだけで構成される基本を持っていました。
public class Client : Entity
{
[Required]
public string Name { get; set; }
}
私の は、通常のフィールドなどUser
と一緒に次のものを持っています:Name
Client
public class User : Entity
{
[Required, MinLength(4), Display(Name = "Username")]
public string Username { get; set; }
[Required, MinLength(2), Display(Name = "First Name")]
public string FirstName { get; set; }
[Required, MinLength(2), Display(Name = "Last Name")]
public string LastName { get; set; }
[Required, EmailAddress]
public string Email { get; set; }
...
[Required]
public virtual Client Client { get; set; }
}
私のGet
方法:
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string[] includeProperties = null)
{
IQueryable<TEntity> query = dbSet;
if (includeProperties != null)
query = includeProperties.Aggregate(query, (q, s) => q.Include(s));
query = query.Where(x => !x.Deleted);
if (filter != null)
query = query.Where(filter);
return orderBy != null ? orderBy(query).ToList() : query.ToList();
}
これはすべて問題ありませんでした。AccountManager
だから、問題に:それは実際には私のクライアントにありUser
ます。
public class Client : Entity
{
[Required]
public string Name { get; set; }
[Required]
public CompanyType CompanyType { get; set; }
[Required]
public ClientStatus Status { get; set; }
[SomethingInHere?]
public virtual User AccountManager { get; set; }
public DateTime? AccessFrom { get; set; }
public DateTime? AccessTo { get; set; }
public DateTime? ClosedDate { get; set; }
}
sに「AccountManager」を追加し、INCLUDE_STRING
最近Get
でもさまざまなForeignKey
/データ注釈を使用しようとしましたが、AccountManagerを一緒にRequired
引き出すことができません。User
User
それで、私がs をまったく引き出せなくなった理由全体ではないにしても、それが一部であると思います。
要するに、EF のリレーションシップ処理についての私の理解はいくぶん限定されており、今日の私の Google の能力はゼロに達していないようです。
多くUser
の から a Client
. 各1User
台AccountManager
ずつClient
。なぜこれが私にとってとても難しいのですか?
編集:丸められた答え。
modelbuilder パーツに追加:
modelBuilder.Entity<User>()
.HasRequired(x => x.Client)
.WithMany(x => x.Users);
modelBuilder.Entity<Client>()
.HasOptional(x => x.AccountManager);
を変更しClient
て、ユーザーのリストを含めます。
public class Client : Entity
{
[Required]
public string Name { get; set; }
[Required]
public CompanyType CompanyType { get; set; }
[Required]
public ClientStatus Status { get; set; }
public virtual IList<User> Users { get; set; }
public virtual User AccountManager { get; set; }
public DateTime? AccessFrom { get; set; }
public DateTime? AccessTo { get; set; }
public DateTime? ClosedDate { get; set; }
}
それが一緒になって、EFはそれをすべて適切に引き出すのに十分なほど幸せになりました.