2014-02-07 2 views
0

У меня есть объект в моей базе данных, который имеет внешний ключ null.Breeze исключает сущности с внешним ключом null при их расширении

Когда я expand с помощью JavaScript или Include в EF, строки, имеющие этот внешний ключ, будут потеряны.

Sql:

CREATE TABLE Entity 
(
    Id BIGINT NOT NULL PRIMARY KEY 
); 

CREATE TABLE EntityType 
(
    Id BIGINT IDENTITY NOT NULL PRIMARY KEY, 
    EntityId BIGINT NULL REFERENCES Entity(Id) 
); 

INSERT INTO Entity(Id) VALUES (0); 
INSERT INTO Entity(Id) VALUES (1); 

INSERT INTO EntityType(EntityId) VALUES (0); 
INSERT INTO EntityType(EntityId) VALUES (1); 
INSERT INTO EntityType(EntityId) VALUES (NULL); 

C#:

public class Entity 
{ 
    public long Id { get; set; } 
} 

public class EntityType 
{ 
    public long Id { get; set; } 
    public long EntityId { get; set; } 
    public Entity Entity { get; set; } 
} 

public class EntityMap : EntityTypeConfiguration<Entity> 
{ 
    public EntityMap() 
    { 
     HasKey(t => t.Id); 
    } 
} 

public class EntityTypeMap : EntityTypeConfiguration<EntityType> 
{ 
    public EntityTypeMap() 
    { 
     HasKey(t => t.Id); 

     HasRequired(t => t.Entity) 
      .WithMany() 
      .HasForeignKey(t => t.EntityId); 
    } 
} 

[BreezeController] 
public class EntityController : ApiController 
{ 
    private readonly EFContextProvider<EntityContext> _contextProvider = 
     new EFContextProvider<EntityContext>(); 

    [HttpGet] 
    public IQueryable<Entity> Entities() 
    { 
     return _contextProvider.Context.Entities; 
    } 

    [HttpGet] 
    public IQueryable<EntityType> EntityType() 
    { 
     return _contextProvider.Context.EntityTypes; 
    } 
} 

JS:

angular.module('App').factory('EntityTypeService', function(serviceBase) { 
    function getAll { 
     return serviceBase.manager.executeQuery(
      serviceBase.query. 
       from('EntityTypes'). 
       expand('Entity') 
     ).to$q(); 
    } 

    return { 
     getAll: getAll 
    }; 
}); 

angular.module('App').controller('HomeCtrl', function($scope, EntityTypeService) { 
    EntityTypeService.getAll().then(function(data) { 
     $scope.entityTypes = data.results; 
    }); 
}); 

Когда я анализирую $scope.entityTypes есть только строки с EntityId, который не null.

ответ

0

Оказывается, это вопрос с копией с EF.

Отображение должно быть HasOptional вместо HasRequired.

public class EntityTypeMap : EntityTypeConfiguration<EntityType> 
{ 
    public EntityTypeMap() 
    { 
     HasKey(t => t.Id); 

     HasOptional(t => t.Entity) 
      .WithMany() 
      .HasForeignKey(t => t.EntityId); 
    } 
} 

Это произведет все строки EntityType.

Смежные вопросы