2014-12-29 35 views
0

的保存有多个实体在微风和EF代码首先导致两个额外的空值的实体一对多的关系,的保存有多个实体一对多关系在微风和EF代码第一

什么我做错了吗?

这里是我的代码(我删除从后所有不相关的实体和脚本)

实体

public class Server 
{ 
    public int Id { get; set; } 

    public ICollection<ServerAddress> Addresses { get; set; } 

    public string Name { get; set; } 

    public int DomainId { get; set; } 

    public Domain Domain { get; set; } 
} 

public class ServerAddress 
{ 
    public int Id { get; set; } 

    public string Ip { get; set; } 

    public ICollection<ServerAddressFarm> ServerAddressFarms { get; set; } 

    public int ServerId { get; set; } 

    public Server Server { get; set; } 
} 

的DbContext

public class PortalDbContext : DbContext 
{ 
    public DbSet<Server> Servers { get; set; } 
    public DbSet<ServerAddress> ServerAddresses { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // Server PK 
     modelBuilder.Entity<Server>() 
      .HasKey(t => t.Id) 
      .Property(t=>t.Id) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     // ServerAddress PK 
     modelBuilder.Entity<ServerAddress>() 
      .HasKey(t => t.Id) 
      .Property(t => t.Id) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 


     // Domain 1-->* Server 
     modelBuilder.Entity<Server>() 
      .HasRequired(t => t.Domain) 
      .WithMany(t => t.Servers) 
      .WillCascadeOnDelete(false); 
      //.HasForeignKey(t => t.DomainId); 

     // Server 1-->* ServerAddress 
     modelBuilder.Entity<ServerAddress>() 
      .HasRequired(t => t.Server) 
      .WithMany(t => t.Addresses) 
      .WillCascadeOnDelete(false); 


    } 
} 

角服务

(function() { 
"use strict"; 

angular.module('portalApp') 
    .service('serversService', [ 
     '$q', '$http', 
     function ($q, $http) { 
      var self = this; 

      breeze.NamingConvention.camelCase.setAsDefault(); 
      self.manager = new breeze.EntityManager('breeze/Servers'); 

      self.addServer = function(server, serverData) { 

       var serverEntity = self.manager.createEntity('Server', server); 
       self.manager.addEntity(serverEntity); 

       if (serverData.ip1) { 
        serverData.ip1 = self.manager.createEntity('ServerAddress', { ip: serverData.ip1, server: serverEntity }); 
        self.manager.addEntity(serverData.ip1); 
        server.addresses.push({ ip: serverData.ip1 }); 

       } 

       if (serverData.ip2) { 
        serverData.ip2 = self.manager.createEntity('ServerAddress', { ip: serverData.ip2, server: serverEntity }); 
        self.manager.addEntity(serverData.ip2); 
        server.addresses.push({ ip: serverData.ip2 }); 
       } 

       return self.manager.saveChanges(); 
      }; 
     } 
    ]); 
}()); 

角控制器

(function() { 
"use strict"; 
angular.module('portalApp') 
    .controller('serverListCtrl', ['$rootScope', '$scope', 'serversService', 'notificationFactory', 
     function ($rootScope, $scope, serversService, notificationFactory) { 
      var vm = this; 

      vm.addServer = function() { 
       serversService.addServer(vm.server, vm.serverData) 
        .then(
         function (data) { 
          vm.server = { name: null, addresses: [] }; 
          vm.serverData = { ip1: null, ip2: null }; 
          notificationFactory.success("server was added"); 
          vm.getServers(vm.domain); 
         }) 
        .fail(
         function (reason) { 
          notificationFactory.errors(reason); 
         }); 
      }; 


      vm.init = function() { 
       vm.domain = null; 
       vm.server = {name: null, addresses: [{},{}]}; 
       vm.serverData = { ip1: null, ip2: null}; 
      }; 

      vm.init(); 
     }]); 
}()); 

enter image description here

enter image description here

+1

您正在为'EntityManager.createEntity'提供initalValues参数。该对象有一个“服务器”属性,它提供足够的信息来自动将新创建的ServerAddress实体与其父服务器实体连接起来。 'self.manager.addEntity'和'server.addresses.push'行是不必要的。要确认一切工作正常,请在'createEntity'行后面设置一个断点并检查server.addresses数组。它应该包含新的ServerAddress实体。 –

回答

1

除去所述不需要self.manager.addEntity和server.addresses.push线解决了这个问题, 感谢Jeremy Danyow

  self.addServer = function(server, serverData) { 

       var serverEntity = self.manager.createEntity('Server', server); 
       self.manager.addEntity(serverEntity); 

       if (serverData.ip1) { 
        serverData.ip1 = self.manager.createEntity('ServerAddress', { ip: serverData.ip1, server: serverEntity }); 
        //self.manager.addEntity(serverData.ip1); 
        //server.addresses.push({ ip: serverData.ip1 }); 

       } 

       if (serverData.ip2) { 
        serverData.ip2 = self.manager.createEntity('ServerAddress', { ip: serverData.ip2, server: serverEntity }); 
        //self.manager.addEntity(serverData.ip2); 
        //server.addresses.push({ ip: serverData.ip2 }); 
       } 



       return self.manager.saveChanges(); 
      }; 
相关问题