Отображение Json в ef6 ComplexType с ICollection, но не может каскадно удалять - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть какой-то сложный 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...