私はこのモデルを持っています
public class Topic
{
public int Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
[Association(ThisKey="Id", OtherKey="TopicId")] // Need to remove and go to fluent syntax definition
public virtual ICollection<Message> Messages { get; set; }
}
public class Message
{
public int Id { get; set; }
public int TopicId { get; set; }
[Association(ThisKey="TopicId", OtherKey="Id")]
public virtual Topic Topic { get; set; }
public string Text { get; set; }
}
そして、このクエリ
db.Topics.Where(x => x.Id == 6).Select(x =>
new
{
Topic = x,
MessagesIds = x.Messages.Select(t => t.Id).ToList()
}).FirstOrDefault();
すべて正常に動作しますが、流れるような API で 1 対多の関連付けを行う方法を探しています。
属性を削除すると
[Association(ThisKey="Id", OtherKey="TopicId")] // This removed
public virtual ICollection<Message> Messages { get; set; }
そしてそのようなことをする
mp.Entity<Topic>().Association(x => x.Messages, (x, y) => x.Id == y.TopicId);
クエリはこれで失敗します
ArgumentNullException: 値を null にすることはできません。パラメーター名: body System.Linq.Expressions.Expression.Lambda(式本体、文字列名、bool tailCall、IEnumerable パラメーター) System.Linq.Expressions.Expression.Lambda(式本体、ParameterExpression[] パラメーター) LinqToDB.Linq.Builder. ExpressionBuilder+<>c__DisplayClass94_0.b__1(式 e) LinqToDB.Expressions.Extensions.Transform(式 expr, Func func) LinqToDB.Expressions.Extensions.Transform(ICollection ソース, Func func) LinqToDB.Expressions.Extensions.TransformX(MethodCallExpression e, Func func) LinqToDB.Expressions.Extensions.Transform(Expression expr, Func func)
多分私は連想を間違って書いていますか?流暢な構文で 1 対多の関連付けを記述する適切な方法は?