У меня есть эта модель
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();
Все отлично работает, но я ищу способ, как сделать ассоциацию 1 ко многим свободно бегущим API.
Если я удаляю атрибут
[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: значение не может быть нулевым,Имя параметра: тело 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 (выражение выражения, Func func) LinqToDB.Expressions.Extensions.Transform (источник ICollection, Func func) LinqToDB.ExpressallExExression (ExpressionBexception).func) LinqToDB.Expressions.Extensions.Transform (выражение expr, Func func)
Может быть, я неправильно пишу ассоциацию?Как лучше написать 1 ко многим ассоциациям в свободном синтаксисе?