У меня есть какой-то сложный JSON, в который я загружаюсь непосредственно в класс модели, но я хочу убедиться, что если корневая запись будет удалена, дочерние записи также будут удалены.
Однако из-за того, что яЯ использую ComplexType Я не могу понять синтаксис правильно.
Остальная часть очень большой части JSON работает, но часть, представленная в упрощенном примере ниже, не.
Пример события JSON:
{"eventId":12345,
"zone": {
"beach": {
"score": 19,
"team": [{
"id": "abcdef",
"name": "Barry",
"playerType": 2
},
{
"id": "bvfe43",
"name": "Adam",
"playerType": 1
},
{
"id": "g3yh6",
"name": "Mary",
"playerType": 1
}]
},
"cave": {
"score": 1,
"team": [{
"id": "qPoavMkCTeKIy_htsvSKpQ",
"name": "CAPITALMONCALAMARICRUISER",
"playerType": 3
},
{
"id": "ggsd84",
"name": "Tibor",
"playerType": 1
},
{
"id": "2332edc",
"name": "Jun",
"playerType": 1
},
{
"id": "f234fg54",
"name": "Aaron",
"playerType": 1
}]
}
}
Каждое событие имеет zone.beach и zone.cave, а у zone.beach и zone.cave есть счет и команда.
MyEF модель:
public class Event
{
[Key]
public int id { get; set; }
public int eventId { get; set;}
public Zone zone { get; set;}
}
[ComplexType]
public class Zone
{
public Beach beach { get; set; }
public Cave cave { get; set; }
}
[ComplexType]
public class Beach
{
public int score { get; set; }
public ICollection<Team> team { get; set; }
}
[ComplexType]
public class Cave
{
public int score { get; set; }
public ICollection<Team> team { get; set; }
}
public class Team
{
[Key]
public int teamId { get; set;}
public string id { get; set;}
public string name { get; set;}
public int playerType { get; set;}
}
И я загружаю JSON следующим образом:
var event = JsonConvert.DeserializeObject<Event>(content);
Но когда база данных инициализируется с этим кодом:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Event>()
.HasMany(a => a.zone.beach.team)
.WithRequired()
.WillCascadeOnDelete(true);
modelBuilder.Entity<Event>()
.HasMany(a => a.zone.cave.team)
.WithRequired()
.WillCascadeOnDelete(true);
}
Я получаюисключение:
System.InvalidOperationException HResult = 0x80131509 Сообщение = Выражение 'a => a.zone.beach.team' не является допустимым выражением свойства.Выражение должно представлять свойство: C #: 't => t.MyProperty' VB.Net: 'Function (t) t.MyProperty'.Source = EntityFramework StackTrace: в System.Data.Entity.Utilities.ExpressionExtensions.GetSimplePropertyAccess (свойство LambdaExpressionAccessExpression) в System.Data.Entity.ModelConfiguration.EntityTypeConfiguration 1.HasMany[TTargetEntity](Expression
1 navigationPropertyExpression)
1