提交 367f8a53 编写于 作者: 麦壳饼's avatar 麦壳饼

add audit log and Data Side

上级 76513da7
......@@ -200,14 +200,14 @@ namespace IoTSharp.Hub.Controllers
}
else
{
var result = await SaveAsync<TelemetryLatest, TelemetryData>(telemetrys, device.FirstOrDefault());
var result = await SaveAsync<TelemetryLatest, TelemetryData>(telemetrys, device.FirstOrDefault(), DataSide.ClientSide);
return Ok(new ApiResult<Dic>(result.ret > 0 ? ApiCode.Success : ApiCode.NothingToDo, result.ret > 0 ? "OK" : "No Telemetry save", result.exceptions));
}
}
[AllowAnonymous]
[HttpPost("{access_token}/Attribute")]
public async Task<ActionResult<ApiResult<Dic>>> Attribute(string access_token, Dictionary<string, object> attributes)
[HttpPost("{access_token}/Attributes")]
public async Task<ActionResult<ApiResult<Dic>>> Attributes(string access_token, Dictionary<string, object> attributes)
{
Dic exceptions = new Dic();
var deviceIdentity = from id in _context.DeviceIdentities where id.IdentityId == access_token && id.IdentityType == IdentityType.AccessToken select id;
......@@ -218,7 +218,7 @@ namespace IoTSharp.Hub.Controllers
}
else
{
var result = await SaveAsync<AttributeLatest, AttributeData>(attributes, device.FirstOrDefault());
var result = await SaveAsync<AttributeLatest, AttributeData>(attributes, device.FirstOrDefault(), DataSide.ClientSide);
return Ok(new ApiResult<Dic>(result.ret > 0 ? ApiCode.Success : ApiCode.NothingToDo, result.ret > 0 ? "OK" : "No Attribute save", result.exceptions));
}
}
......@@ -231,7 +231,7 @@ namespace IoTSharp.Hub.Controllers
/// <param name="data"></param>
/// <param name="device"></param>
/// <returns></returns>
private async Task<(int ret, Dic exceptions)> SaveAsync<L, D>(Dictionary<string, object> data, Device device) where L : DataStorage, new() where D : DataStorage, new()
private async Task<(int ret, Dic exceptions)> SaveAsync<L, D>(Dictionary<string, object> data, Device device, DataSide dataSide) where L : DataStorage, new() where D : DataStorage, new()
{
Dic exceptions = new Dic();
data.ToList().ForEach(kp =>
......@@ -253,7 +253,7 @@ namespace IoTSharp.Hub.Controllers
}
else
{
var t2 = new L() { DateTime = DateTime.Now, Device = device, Id = Guid.NewGuid(), KeyName = kp.Key };
var t2 = new L() { DateTime = DateTime.Now, Device = device, Id = Guid.NewGuid(), KeyName = kp.Key, DataSide= dataSide };
FillKVToModel(kp, t2);
_context.Set<L>().Add(t2);
}
......
......@@ -96,6 +96,16 @@ namespace IoTSharp.Hub.Data
modelBuilder.Entity<TelemetryLatest>()
.Property(b => b.Value_XML)
.HasColumnType("xml");
modelBuilder.Entity<AuditLog>()
.Property(b => b.ActionData)
.HasColumnType("jsonb");
modelBuilder.Entity<AuditLog>()
.Property(b => b.ActionResult)
.HasColumnType("jsonb");
}
private void ForSqlServer(ModelBuilder modelBuilder)
......@@ -127,5 +137,6 @@ namespace IoTSharp.Hub.Data
public DbSet<AttributeData> AttributeData { get; set; }
public DbSet<TelemetryLatest> TelemetryLatest { get; set; }
public DbSet<DeviceIdentity> DeviceIdentities { get; set; }
public DbSet<AuditLog> AuditLog { get; set; }
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace IoTSharp.Hub.Data
{
public class AuditLog
{
public Guid Id { get; set; } = Guid.NewGuid();
public Tenant Tenant { get; set; }
public Customer Customer { get; set; }
public string UserId { get; set; }
public string UserName { get; set; }
public Guid ObjectID { get; set; }
public string ObjectName { get; set; }
public ObjectType ObjectType { get; set; } = ObjectType.Unknow;
public string ActionName { get; set; }
public string ActionData { get; set; }
public string ActionResult { get; set; }
public DateTime ActiveDateTime { get; set; } = DateTime.Now;
}
}
......@@ -15,6 +15,10 @@ namespace IoTSharp.Hub.Data
[Required]
public Device Device { get; set; }
[Required]
[EnumDataType(typeof(DataSide))]
public DataSide DataSide { get; set; } = DataSide.AnySide;
[Required]
[EnumDataType(typeof(DataCatalog))]
public DataCatalog Catalog { get; set; }
......
......@@ -36,7 +36,12 @@ namespace IoTSharp.Hub.Data
TelemetryData,
TelemetryLatest,
}
public enum DataSide
{
AnySide,
ServerSide,
ClientSide,
}
public enum UserRole
{
Anonymous,
......@@ -70,4 +75,15 @@ namespace IoTSharp.Hub.Data
DevicePassword,
X509Certificate
}
public enum ObjectType
{
Unknow,
Device,
Tenant,
Customer,
User,
MQTTBroker,
MQTTClient
}
}
\ No newline at end of file
// <auto-generated />
using System;
using IoTSharp.Hub.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace IoTSharp.Hub.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20190129085237_AuditLog")]
partial class AuditLog
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)
.HasAnnotation("ProductVersion", "2.2.1-servicing-10028")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
modelBuilder.Entity("IoTSharp.Hub.Data.AuditLog", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ActionData")
.HasColumnType("jsonb");
b.Property<string>("ActionName");
b.Property<string>("ActionResult")
.HasColumnType("jsonb");
b.Property<DateTime>("ActiveDateTime");
b.Property<Guid?>("CustomerId");
b.Property<Guid>("ObjectID");
b.Property<string>("ObjectName");
b.Property<int>("ObjectType");
b.Property<Guid?>("TenantId");
b.Property<string>("UserId");
b.Property<string>("UserName");
b.HasKey("Id");
b.HasIndex("CustomerId");
b.HasIndex("TenantId");
b.ToTable("AuditLog");
});
modelBuilder.Entity("IoTSharp.Hub.Data.Customer", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("Address");
b.Property<string>("City");
b.Property<string>("Country");
b.Property<string>("Email");
b.Property<string>("Name");
b.Property<string>("Phone");
b.Property<string>("Province");
b.Property<string>("Street");
b.Property<Guid?>("TenantId");
b.Property<int>("ZipCode");
b.HasKey("Id");
b.HasIndex("TenantId");
b.ToTable("Customer");
});
modelBuilder.Entity("IoTSharp.Hub.Data.DataStorage", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<int>("Catalog");
b.Property<int>("DataSide");
b.Property<DateTime>("DateTime");
b.Property<string>("KeyName")
.IsRequired();
b.Property<int>("Type");
b.Property<byte[]>("Value_Binary");
b.Property<bool>("Value_Boolean");
b.Property<double>("Value_Double");
b.Property<string>("Value_Json")
.HasColumnType("jsonb");
b.Property<long>("Value_Long");
b.Property<string>("Value_String");
b.Property<string>("Value_XML")
.HasColumnType("xml");
b.HasKey("Id");
b.ToTable("DataStorage");
b.HasDiscriminator<int>("Catalog").HasValue(0);
});
modelBuilder.Entity("IoTSharp.Hub.Data.Device", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<Guid?>("CustomerId");
b.Property<string>("Name");
b.Property<Guid?>("TenantId");
b.Property<string>("Type");
b.HasKey("Id");
b.HasIndex("CustomerId");
b.HasIndex("TenantId");
b.ToTable("Device");
});
modelBuilder.Entity("IoTSharp.Hub.Data.DeviceIdentity", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<Guid>("DeviceId");
b.Property<string>("IdentityId")
.IsRequired();
b.Property<int>("IdentityType");
b.Property<string>("IdentityValue");
b.HasKey("Id");
b.HasIndex("DeviceId");
b.ToTable("DeviceIdentities");
});
modelBuilder.Entity("IoTSharp.Hub.Data.Relationship", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<Guid?>("CustomerId");
b.Property<string>("IdentityUserId");
b.Property<Guid?>("TenantId");
b.HasKey("Id");
b.HasIndex("CustomerId");
b.HasIndex("IdentityUserId");
b.HasIndex("TenantId");
b.ToTable("Relationship");
});
modelBuilder.Entity("IoTSharp.Hub.Data.Tenant", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("Address");
b.Property<string>("City");
b.Property<string>("Country");
b.Property<string>("EMail");
b.Property<string>("Name");
b.Property<string>("Phone");
b.Property<string>("Province");
b.Property<string>("Street");
b.Property<int>("ZipCode");
b.HasKey("Id");
b.ToTable("Tenant");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken();
b.Property<string>("Name")
.HasMaxLength(256);
b.Property<string>("NormalizedName")
.HasMaxLength(256);
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasName("RoleNameIndex");
b.ToTable("AspNetRoles");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ClaimType");
b.Property<string>("ClaimValue");
b.Property<string>("RoleId")
.IsRequired();
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd();
b.Property<int>("AccessFailedCount");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken();
b.Property<string>("Email")
.HasMaxLength(256);
b.Property<bool>("EmailConfirmed");
b.Property<bool>("LockoutEnabled");
b.Property<DateTimeOffset?>("LockoutEnd");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256);
b.Property<string>("NormalizedUserName")
.HasMaxLength(256);
b.Property<string>("PasswordHash");
b.Property<string>("PhoneNumber");
b.Property<bool>("PhoneNumberConfirmed");
b.Property<string>("SecurityStamp");
b.Property<bool>("TwoFactorEnabled");
b.Property<string>("UserName")
.HasMaxLength(256);
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasName("UserNameIndex");
b.ToTable("AspNetUsers");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ClaimType");
b.Property<string>("ClaimValue");
b.Property<string>("UserId")
.IsRequired();
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider");
b.Property<string>("ProviderKey");
b.Property<string>("ProviderDisplayName");
b.Property<string>("UserId")
.IsRequired();
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId");
b.Property<string>("RoleId");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId");
b.Property<string>("LoginProvider");
b.Property<string>("Name");
b.Property<string>("Value");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens");
});
modelBuilder.Entity("IoTSharp.Hub.Data.AttributeData", b =>
{
b.HasBaseType("IoTSharp.Hub.Data.DataStorage");
b.Property<Guid>("DeviceId");
b.HasIndex("DeviceId");
b.HasDiscriminator().HasValue(1);
});
modelBuilder.Entity("IoTSharp.Hub.Data.AttributeLatest", b =>
{
b.HasBaseType("IoTSharp.Hub.Data.DataStorage");
b.Property<Guid>("DeviceId")
.HasColumnName("AttributeLatest_DeviceId");
b.HasIndex("DeviceId");
b.HasDiscriminator().HasValue(2);
});
modelBuilder.Entity("IoTSharp.Hub.Data.TelemetryData", b =>
{
b.HasBaseType("IoTSharp.Hub.Data.DataStorage");
b.Property<Guid>("DeviceId")
.HasColumnName("TelemetryData_DeviceId");
b.HasIndex("DeviceId");
b.HasDiscriminator().HasValue(3);
});
modelBuilder.Entity("IoTSharp.Hub.Data.TelemetryLatest", b =>
{
b.HasBaseType("IoTSharp.Hub.Data.DataStorage");
b.Property<Guid>("DeviceId")
.HasColumnName("TelemetryLatest_DeviceId");
b.HasIndex("DeviceId");
b.HasDiscriminator().HasValue(4);
});
modelBuilder.Entity("IoTSharp.Hub.Data.AuditLog", b =>
{
b.HasOne("IoTSharp.Hub.Data.Customer", "Customer")
.WithMany()
.HasForeignKey("CustomerId");
b.HasOne("IoTSharp.Hub.Data.Tenant", "Tenant")
.WithMany()
.HasForeignKey("TenantId");
});
modelBuilder.Entity("IoTSharp.Hub.Data.Customer", b =>
{
b.HasOne("IoTSharp.Hub.Data.Tenant", "Tenant")
.WithMany("Customers")
.HasForeignKey("TenantId");
});
modelBuilder.Entity("IoTSharp.Hub.Data.Device", b =>
{
b.HasOne("IoTSharp.Hub.Data.Customer", "Customer")
.WithMany("Devices")
.HasForeignKey("CustomerId");
b.HasOne("IoTSharp.Hub.Data.Tenant", "Tenant")
.WithMany("Devices")
.HasForeignKey("TenantId");
});
modelBuilder.Entity("IoTSharp.Hub.Data.DeviceIdentity", b =>
{
b.HasOne("IoTSharp.Hub.Data.Device", "Device")
.WithMany()
.HasForeignKey("DeviceId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("IoTSharp.Hub.Data.Relationship", b =>
{
b.HasOne("IoTSharp.Hub.Data.Customer", "Customer")
.WithMany()
.HasForeignKey("CustomerId");
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", "IdentityUser")
.WithMany()
.HasForeignKey("IdentityUserId");
b.HasOne("IoTSharp.Hub.Data.Tenant", "Tenant")
.WithMany()
.HasForeignKey("TenantId");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole")
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("IoTSharp.Hub.Data.AttributeData", b =>
{
b.HasOne("IoTSharp.Hub.Data.Device", "Device")
.WithMany("AttributeData")
.HasForeignKey("DeviceId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("IoTSharp.Hub.Data.AttributeLatest", b =>
{
b.HasOne("IoTSharp.Hub.Data.Device", "Device")
.WithMany("AttributeLatest")
.HasForeignKey("DeviceId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("IoTSharp.Hub.Data.TelemetryData", b =>
{
b.HasOne("IoTSharp.Hub.Data.Device", "Device")
.WithMany("TelemetryData")
.HasForeignKey("DeviceId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("IoTSharp.Hub.Data.TelemetryLatest", b =>
{
b.HasOne("IoTSharp.Hub.Data.Device", "Device")
.WithMany("TelemetryLatest")
.HasForeignKey("DeviceId")
.OnDelete(DeleteBehavior.Cascade);
});
#pragma warning restore 612, 618
}
}
}
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace IoTSharp.Hub.Migrations
{
public partial class AuditLog : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "DataSide",
table: "DataStorage",
nullable: false,
defaultValue: 0);
migrationBuilder.CreateTable(
name: "AuditLog",
columns: table => new
{
Id = table.Column<Guid>(nullable: false),
TenantId = table.Column<Guid>(nullable: true),
CustomerId = table.Column<Guid>(nullable: true),
UserId = table.Column<string>(nullable: true),
UserName = table.Column<string>(nullable: true),
ObjectID = table.Column<Guid>(nullable: false),
ObjectName = table.Column<string>(nullable: true),
ObjectType = table.Column<int>(nullable: false),
ActionName = table.Column<string>(nullable: true),
ActionData = table.Column<string>(type: "jsonb", nullable: true),
ActionResult = table.Column<string>(type: "jsonb", nullable: true),
ActiveDateTime = table.Column<DateTime>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AuditLog", x => x.Id);
table.ForeignKey(
name: "FK_AuditLog_Customer_CustomerId",
column: x => x.CustomerId,
principalTable: "Customer",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_AuditLog_Tenant_TenantId",
column: x => x.TenantId,
principalTable: "Tenant",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateIndex(
name: "IX_AuditLog_CustomerId",
table: "AuditLog",
column: "CustomerId");
migrationBuilder.CreateIndex(
name: "IX_AuditLog_TenantId",
table: "AuditLog",
column: "TenantId");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AuditLog");
migrationBuilder.DropColumn(
name: "DataSide",
table: "DataStorage");
}
}
}
......@@ -16,9 +16,47 @@ namespace IoTSharp.Hub.Migrations
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
.HasAnnotation("ProductVersion", "2.2.1-servicing-10028")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
modelBuilder.Entity("IoTSharp.Hub.Data.AuditLog", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ActionData")
.HasColumnType("jsonb");
b.Property<string>("ActionName");
b.Property<string>("ActionResult")
.HasColumnType("jsonb");
b.Property<DateTime>("ActiveDateTime");
b.Property<Guid?>("CustomerId");
b.Property<Guid>("ObjectID");
b.Property<string>("ObjectName");
b.Property<int>("ObjectType");
b.Property<Guid?>("TenantId");
b.Property<string>("UserId");
b.Property<string>("UserName");
b.HasKey("Id");
b.HasIndex("CustomerId");
b.HasIndex("TenantId");
b.ToTable("AuditLog");
});
modelBuilder.Entity("IoTSharp.Hub.Data.Customer", b =>
{
b.Property<Guid>("Id")
......@@ -58,6 +96,8 @@ namespace IoTSharp.Hub.Migrations
b.Property<int>("Catalog");
b.Property<int>("DataSide");
b.Property<DateTime>("DateTime");
b.Property<string>("KeyName")
......@@ -385,6 +425,17 @@ namespace IoTSharp.Hub.Migrations
b.HasDiscriminator().HasValue(4);
});
modelBuilder.Entity("IoTSharp.Hub.Data.AuditLog", b =>
{
b.HasOne("IoTSharp.Hub.Data.Customer", "Customer")
.WithMany()
.HasForeignKey("CustomerId");
b.HasOne("IoTSharp.Hub.Data.Tenant", "Tenant")
.WithMany()
.HasForeignKey("TenantId");
});
modelBuilder.Entity("IoTSharp.Hub.Data.Customer", b =>
{
b.HasOne("IoTSharp.Hub.Data.Tenant", "Tenant")
......
......@@ -44,8 +44,8 @@
</fk>
</table>
<table name="AspNetUserLogins" >
<column name="LoginProvider" type="varchar" length="128" decimal="0" jt="12" mandatory="y" />
<column name="ProviderKey" type="varchar" length="128" decimal="0" jt="12" mandatory="y" />
<column name="LoginProvider" type="text" decimal="0" jt="12" mandatory="y" />
<column name="ProviderKey" type="text" decimal="0" jt="12" mandatory="y" />
<column name="ProviderDisplayName" type="text" decimal="0" jt="12" />
<column name="UserId" type="text" decimal="0" jt="12" mandatory="y" />
<index name="PK_AspNetUserLogins" unique="PRIMARY_KEY" >
......@@ -78,8 +78,8 @@
</table>
<table name="AspNetUserTokens" >
<column name="UserId" type="text" decimal="0" jt="12" mandatory="y" />
<column name="LoginProvider" type="varchar" length="128" decimal="0" jt="12" mandatory="y" />
<column name="Name" type="varchar" length="128" decimal="0" jt="12" mandatory="y" />
<column name="LoginProvider" type="text" decimal="0" jt="12" mandatory="y" />
<column name="Name" type="text" decimal="0" jt="12" mandatory="y" />
<column name="Value" type="text" decimal="0" jt="12" />
<index name="PK_AspNetUserTokens" unique="PRIMARY_KEY" >
<column name="UserId" />
......@@ -116,52 +116,6 @@
<column name="NormalizedEmail" />
</index>
</table>
<table name="AttributeData" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="KeyName" type="text" decimal="0" jt="12" mandatory="y" />
<column name="Type" type="integer" length="10" decimal="0" jt="4" mandatory="y" />
<column name="Value_Boolean" type="bool" length="1" decimal="0" jt="-7" mandatory="y" />
<column name="Value_String" type="text" decimal="0" jt="12" />
<column name="Value_Long" type="bigint" length="19" decimal="0" jt="-5" mandatory="y" />
<column name="Value_Double" type="float8" length="17" decimal="17" jt="6" mandatory="y" />
<column name="Value_Json" type="jsonb" decimal="0" jt="1111" />
<column name="Value_XML" type="xml" decimal="0" jt="2009" />
<column name="Value_Binary" type="bytea" decimal="0" jt="-2" />
<column name="DeviceId" type="uuid" decimal="0" jt="1111" />
<column name="DateTime" type="timestamp" length="29" decimal="6" jt="93" mandatory="y" />
<column name="Discriminator" type="text" decimal="0" jt="12" mandatory="y" />
<column name="Scope" type="integer" length="10" decimal="0" jt="4" />
<column name="DeviceId1" type="uuid" decimal="0" jt="1111" />
<column name="TelemetryData_DeviceId1" type="uuid" decimal="0" jt="1111" />
<column name="TelemetryLatest_DeviceId1" type="uuid" decimal="0" jt="1111" />
<index name="PK_AttributeData" unique="PRIMARY_KEY" >
<column name="Id" />
</index>
<index name="IX_AttributeData_DeviceId" unique="NORMAL" >
<column name="DeviceId" />
</index>
<index name="IX_AttributeData_DeviceId1" unique="NORMAL" >
<column name="DeviceId1" />
</index>
<index name="IX_AttributeData_TelemetryData_DeviceId1" unique="NORMAL" >
<column name="TelemetryData_DeviceId1" />
</index>
<index name="IX_AttributeData_TelemetryLatest_DeviceId1" unique="NORMAL" >
<column name="TelemetryLatest_DeviceId1" />
</index>
<fk name="FK_AttributeData_Device_DeviceId" to_schema="public" to_table="Device" delete_action="restrict" >
<fk_column name="DeviceId" pk="Id" />
</fk>
<fk name="FK_AttributeData_Device_DeviceId1" to_schema="public" to_table="Device" delete_action="restrict" >
<fk_column name="DeviceId1" pk="Id" />
</fk>
<fk name="FK_AttributeData_Device_TelemetryData_DeviceId1" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="TelemetryData_DeviceId1" pk="Id" />
</fk>
<fk name="FK_AttributeData_Device_TelemetryLatest_DeviceId1" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="TelemetryLatest_DeviceId1" pk="Id" />
</fk>
</table>
<table name="Customer" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="Name" type="text" decimal="0" jt="12" />
......@@ -184,6 +138,53 @@
<fk_column name="TenantId" pk="Id" />
</fk>
</table>
<table name="DataStorage" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="KeyName" type="text" decimal="0" jt="12" mandatory="y" />
<column name="Type" type="integer" length="10" decimal="0" jt="4" mandatory="y" />
<column name="DateTime" type="timestamp" length="29" decimal="6" jt="93" mandatory="y" />
<column name="Value_Boolean" type="bool" length="1" decimal="0" jt="-7" mandatory="y" />
<column name="Value_String" type="text" decimal="0" jt="12" />
<column name="Value_Long" type="bigint" length="19" decimal="0" jt="-5" mandatory="y" />
<column name="Value_Double" type="float8" length="17" decimal="17" jt="6" mandatory="y" />
<column name="Value_Json" type="jsonb" decimal="0" jt="1111" />
<column name="Value_XML" type="xml" decimal="0" jt="2009" />
<column name="Value_Binary" type="bytea" decimal="0" jt="-2" />
<column name="DeviceId" type="uuid" decimal="0" jt="1111" />
<column name="TelemetryData_DeviceId" type="uuid" decimal="0" jt="1111" />
<column name="TelemetryLatest_DeviceId" type="uuid" decimal="0" jt="1111" />
<column name="Catalog" type="integer" length="10" decimal="0" jt="4" mandatory="y" >
<defo>0</defo>
</column>
<column name="AttributeLatest_DeviceId" type="uuid" decimal="0" jt="1111" />
<index name="PK_DataStorage" unique="PRIMARY_KEY" >
<column name="Id" />
</index>
<index name="IX_DataStorage_AttributeLatest_DeviceId" unique="NORMAL" >
<column name="AttributeLatest_DeviceId" />
</index>
<index name="IX_DataStorage_DeviceId" unique="NORMAL" >
<column name="DeviceId" />
</index>
<index name="IX_DataStorage_TelemetryData_DeviceId" unique="NORMAL" >
<column name="TelemetryData_DeviceId" />
</index>
<index name="IX_DataStorage_TelemetryLatest_DeviceId" unique="NORMAL" >
<column name="TelemetryLatest_DeviceId" />
</index>
<fk name="FK_DataStorage_Device_AttributeLatest_DeviceId" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="AttributeLatest_DeviceId" pk="Id" />
</fk>
<fk name="FK_DataStorage_Device_DeviceId" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="DeviceId" pk="Id" />
</fk>
<fk name="FK_DataStorage_Device_TelemetryData_DeviceId" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="TelemetryData_DeviceId" pk="Id" />
</fk>
<fk name="FK_DataStorage_Device_TelemetryLatest_DeviceId" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="TelemetryLatest_DeviceId" pk="Id" />
</fk>
</table>
<table name="Device" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="Name" type="text" decimal="0" jt="12" />
......@@ -206,11 +207,27 @@
<fk_column name="TenantId" pk="Id" />
</fk>
</table>
<table name="DeviceIdentities" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="IdentityType" type="integer" length="10" decimal="0" jt="4" mandatory="y" />
<column name="IdentityId" type="text" decimal="0" jt="12" mandatory="y" />
<column name="IdentityValue" type="text" decimal="0" jt="12" />
<column name="DeviceId" type="uuid" decimal="0" jt="1111" mandatory="y" />
<index name="PK_DeviceIdentities" unique="PRIMARY_KEY" >
<column name="Id" />
</index>
<index name="IX_DeviceIdentities_DeviceId" unique="NORMAL" >
<column name="DeviceId" />
</index>
<fk name="FK_DeviceIdentities_Device_DeviceId" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="DeviceId" pk="Id" />
</fk>
</table>
<table name="Relationship" >
<column name="CustomerId" type="uuid" decimal="0" jt="1111" />
<column name="TenantId" type="uuid" decimal="0" jt="1111" />
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="IdentityId" type="text" decimal="0" jt="12" />
<column name="IdentityUserId" type="text" decimal="0" jt="12" />
<index name="IX_Relationship_TenantId" unique="NORMAL" >
<column name="TenantId" />
</index>
......@@ -220,18 +237,18 @@
<index name="PK_Relationship" unique="PRIMARY_KEY" >
<column name="Id" />
</index>
<index name="IX_Relationship_IdentityId" unique="NORMAL" >
<column name="IdentityId" />
<index name="IX_Relationship_IdentityUserId" unique="NORMAL" >
<column name="IdentityUserId" />
</index>
<fk name="FK_Relationship_AspNetUsers_IdentityId" to_schema="public" to_table="AspNetUsers" delete_action="restrict" >
<fk_column name="IdentityId" pk="Id" />
</fk>
<fk name="FK_Relationship_Customer_CustomerId" to_schema="public" to_table="Customer" delete_action="restrict" >
<fk_column name="CustomerId" pk="Id" />
</fk>
<fk name="FK_Relationship_Tenant_TenantId" to_schema="public" to_table="Tenant" delete_action="restrict" >
<fk_column name="TenantId" pk="Id" />
</fk>
<fk name="FK_Relationship_AspNetUsers_IdentityUserId" to_schema="public" to_table="AspNetUsers" delete_action="restrict" >
<fk_column name="IdentityUserId" pk="Id" />
</fk>
</table>
<table name="Tenant" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
......@@ -258,27 +275,27 @@
<sequence name="AspNetRoleClaims_Id_seq" start="1" />
<sequence name="AspNetUserClaims_Id_seq" start="1" />
</schema>
<connector name="PostgreSQL" database="PostgreSQL" driver_class="org.postgresql.Driver" driver_jar="postgresql-42.2.2.jar" driver_desc="Standard" host="localhost" port="5432" instance="IoTSharp" user="postgres" passwd="ZnV0dXJl" />
<connector name="PostgreSQL" database="PostgreSQL" driver_class="org.postgresql.Driver" driver_jar="postgresql-42.2.5.jar" driver_desc="Standard" host="localhost" port="5432" instance="IoTSharp" user="postgres" passwd="cG9zdGdyZXM=" sshEnable="true" sshHost="39.98.211.23" sshPort="22" sshUser="root" sshUseKey="false" sshPassword="1-q2-w3-e4-r5-t" />
<layout name="Default Layout" id="Layout_159a766" show_relation="columns" >
<entity schema="public" name="AspNetRoles" color="C7F4BE" x="1040" y="80" />
<entity schema="public" name="AspNetUserLogins" color="C7F4BE" x="864" y="432" />
<entity schema="public" name="AspNetRoleClaims" color="C7F4BE" x="1248" y="80" />
<entity schema="public" name="__EFMigrationsHistory" color="F4DDBE" x="624" y="768" />
<entity schema="public" name="AspNetUsers" color="C7F4BE" x="624" y="80" />
<entity schema="public" name="AspNetUserRoles" color="C7F4BE" x="864" y="80" />
<entity schema="public" name="AspNetUserTokens" color="C7F4BE" x="624" y="432" />
<entity schema="public" name="AspNetUserClaims" color="C7F4BE" x="864" y="256" />
<entity schema="public" name="Relationship" color="BED3F4" x="336" y="544" />
<entity schema="public" name="Customer" color="BED3F4" x="48" y="272" />
<entity schema="public" name="Tenant" color="BED3F4" x="192" y="272" />
<entity schema="public" name="Device" color="BED3F4" x="192" y="80" />
<entity schema="public" name="AttributeData" color="BED3F4" x="352" y="80" />
<entity schema="public" name="AspNetRoles" color="C7F4BE" x="992" y="80" />
<entity schema="public" name="AspNetUserLogins" color="C7F4BE" x="816" y="432" />
<entity schema="public" name="AspNetRoleClaims" color="C7F4BE" x="1200" y="80" />
<entity schema="public" name="__EFMigrationsHistory" color="F4DDBE" x="352" y="1040" />
<entity schema="public" name="AspNetUsers" color="C7F4BE" x="576" y="80" />
<entity schema="public" name="AspNetUserRoles" color="C7F4BE" x="816" y="80" />
<entity schema="public" name="AspNetUserTokens" color="C7F4BE" x="576" y="432" />
<entity schema="public" name="AspNetUserClaims" color="C7F4BE" x="816" y="256" />
<entity schema="public" name="Relationship" color="BED3F4" x="368" y="80" />
<entity schema="public" name="Customer" color="BED3F4" x="64" y="272" />
<entity schema="public" name="Tenant" color="BED3F4" x="224" y="80" />
<entity schema="public" name="Device" color="BED3F4" x="64" y="80" />
<entity schema="public" name="DataStorage" color="3986C1" x="48" y="608" />
<entity schema="public" name="DeviceIdentities" color="3986C1" x="352" y="608" />
<group name="Device" color="ECF0F7" >
<entity schema="public" name="Device" />
<entity schema="public" name="Tenant" />
<entity schema="public" name="Customer" />
<entity schema="public" name="Relationship" />
<entity schema="public" name="AttributeData" />
</group>
<group name="AspNetUsers" color="EEF7EC" >
<entity schema="public" name="AspNetUsers" />
......
......@@ -116,9 +116,9 @@
<column name="NormalizedEmail" />
</index>
</table>
<table name="ClientSideAttribute" >
<table name="AttributeData" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="Name" type="text" decimal="0" jt="12" />
<column name="KeyName" type="text" decimal="0" jt="12" mandatory="y" />
<column name="Type" type="integer" length="10" decimal="0" jt="4" mandatory="y" />
<column name="Value_Boolean" type="bool" length="1" decimal="0" jt="-7" mandatory="y" />
<column name="Value_String" type="text" decimal="0" jt="12" />
......@@ -127,9 +127,40 @@
<column name="Value_Json" type="jsonb" decimal="0" jt="1111" />
<column name="Value_XML" type="xml" decimal="0" jt="2009" />
<column name="Value_Binary" type="bytea" decimal="0" jt="-2" />
<index name="PK_ClientSideAttribute" unique="PRIMARY_KEY" >
<column name="DeviceId" type="uuid" decimal="0" jt="1111" />
<column name="DateTime" type="timestamp" length="29" decimal="6" jt="93" mandatory="y" />
<column name="Discriminator" type="text" decimal="0" jt="12" mandatory="y" />
<column name="Scope" type="integer" length="10" decimal="0" jt="4" />
<column name="DeviceId1" type="uuid" decimal="0" jt="1111" />
<column name="TelemetryData_DeviceId1" type="uuid" decimal="0" jt="1111" />
<column name="TelemetryLatest_DeviceId1" type="uuid" decimal="0" jt="1111" />
<index name="PK_AttributeData" unique="PRIMARY_KEY" >
<column name="Id" />
</index>
<index name="IX_AttributeData_DeviceId" unique="NORMAL" >
<column name="DeviceId" />
</index>
<index name="IX_AttributeData_DeviceId1" unique="NORMAL" >
<column name="DeviceId1" />
</index>
<index name="IX_AttributeData_TelemetryData_DeviceId1" unique="NORMAL" >
<column name="TelemetryData_DeviceId1" />
</index>
<index name="IX_AttributeData_TelemetryLatest_DeviceId1" unique="NORMAL" >
<column name="TelemetryLatest_DeviceId1" />
</index>
<fk name="FK_AttributeData_Device_DeviceId" to_schema="public" to_table="Device" delete_action="restrict" >
<fk_column name="DeviceId" pk="Id" />
</fk>
<fk name="FK_AttributeData_Device_DeviceId1" to_schema="public" to_table="Device" delete_action="restrict" >
<fk_column name="DeviceId1" pk="Id" />
</fk>
<fk name="FK_AttributeData_Device_TelemetryData_DeviceId1" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="TelemetryData_DeviceId1" pk="Id" />
</fk>
<fk name="FK_AttributeData_Device_TelemetryLatest_DeviceId1" to_schema="public" to_table="Device" delete_action="cascade" >
<fk_column name="TelemetryLatest_DeviceId1" pk="Id" />
</fk>
</table>
<table name="Customer" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
......@@ -152,9 +183,6 @@
<fk name="FK_Customer_Tenant_TenantId" to_schema="public" to_table="Tenant" delete_action="restrict" >
<fk_column name="TenantId" pk="Id" />
</fk>
<fk name="fk_customer_relationship" to_schema="public" to_table="Relationship" >
<fk_column name="Id" pk="CustomerId" />
</fk>
</table>
<table name="Device" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
......@@ -179,48 +207,31 @@
</fk>
</table>
<table name="Relationship" >
<column name="UseId" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="CustomerId" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="TenantId" type="uuid" decimal="0" jt="1111" mandatory="y" />
<index name="PK_Relationship" unique="PRIMARY_KEY" >
<column name="UseId" />
</index>
<index name="unq_relationship_tenantid" unique="UNIQUE" >
<column name="CustomerId" type="uuid" decimal="0" jt="1111" />
<column name="TenantId" type="uuid" decimal="0" jt="1111" />
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="IdentityId" type="text" decimal="0" jt="12" />
<index name="IX_Relationship_TenantId" unique="NORMAL" >
<column name="TenantId" />
</index>
<index name="unq_relationship_customerid" unique="UNIQUE" >
<index name="IX_Relationship_CustomerId" unique="NORMAL" >
<column name="CustomerId" />
</index>
</table>
<table name="ServerSideAttribute" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="Name" type="text" decimal="0" jt="12" />
<column name="Type" type="integer" length="10" decimal="0" jt="4" mandatory="y" />
<column name="Value_Boolean" type="bool" length="1" decimal="0" jt="-7" mandatory="y" />
<column name="Value_String" type="text" decimal="0" jt="12" />
<column name="Value_Long" type="bigint" length="19" decimal="0" jt="-5" mandatory="y" />
<column name="Value_Double" type="float8" length="17" decimal="17" jt="6" mandatory="y" />
<column name="Value_Json" type="jsonb" decimal="0" jt="1111" />
<column name="Value_XML" type="xml" decimal="0" jt="2009" />
<column name="Value_Binary" type="bytea" decimal="0" jt="-2" />
<index name="PK_ServerSideAttribute" unique="PRIMARY_KEY" >
<index name="PK_Relationship" unique="PRIMARY_KEY" >
<column name="Id" />
</index>
</table>
<table name="SharedSideAttribute" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
<column name="Name" type="text" decimal="0" jt="12" />
<column name="Type" type="integer" length="10" decimal="0" jt="4" mandatory="y" />
<column name="Value_Boolean" type="bool" length="1" decimal="0" jt="-7" mandatory="y" />
<column name="Value_String" type="text" decimal="0" jt="12" />
<column name="Value_Long" type="bigint" length="19" decimal="0" jt="-5" mandatory="y" />
<column name="Value_Double" type="float8" length="17" decimal="17" jt="6" mandatory="y" />
<column name="Value_Json" type="jsonb" decimal="0" jt="1111" />
<column name="Value_XML" type="xml" decimal="0" jt="2009" />
<column name="Value_Binary" type="bytea" decimal="0" jt="-2" />
<index name="PK_SharedSideAttribute" unique="PRIMARY_KEY" >
<column name="Id" />
<index name="IX_Relationship_IdentityId" unique="NORMAL" >
<column name="IdentityId" />
</index>
<fk name="FK_Relationship_AspNetUsers_IdentityId" to_schema="public" to_table="AspNetUsers" delete_action="restrict" >
<fk_column name="IdentityId" pk="Id" />
</fk>
<fk name="FK_Relationship_Customer_CustomerId" to_schema="public" to_table="Customer" delete_action="restrict" >
<fk_column name="CustomerId" pk="Id" />
</fk>
<fk name="FK_Relationship_Tenant_TenantId" to_schema="public" to_table="Tenant" delete_action="restrict" >
<fk_column name="TenantId" pk="Id" />
</fk>
</table>
<table name="Tenant" >
<column name="Id" type="uuid" decimal="0" jt="1111" mandatory="y" />
......@@ -236,9 +247,6 @@
<index name="PK_Tenant" unique="PRIMARY_KEY" >
<column name="Id" />
</index>
<fk name="fk_tenant_relationship" to_schema="public" to_table="Relationship" >
<fk_column name="Id" pk="TenantId" />
</fk>
</table>
<table name="__EFMigrationsHistory" >
<column name="MigrationId" type="varchar" length="150" decimal="0" jt="12" mandatory="y" />
......@@ -250,23 +258,37 @@
<sequence name="AspNetRoleClaims_Id_seq" start="1" />
<sequence name="AspNetUserClaims_Id_seq" start="1" />
</schema>
<connector name="PostgreSQL" database="PostgreSQL" driver_class="org.postgresql.Driver" driver_jar="postgresql-42.2.2.jar" driver_desc="Standard" host="localhost" port="5432" instance="IoTSharp" user="postgres" passwd="ZnV0dXJl" />
<connector name="PostgreSQL" database="PostgreSQL" driver_class="org.postgresql.Driver" driver_jar="postgresql-42.2.2.jar" driver_desc="Standard" host="127.0.0.1" port="5432" instance="IoTSharp" user="postgres" passwd="ZnV0dXJl" />
<layout name="Default Layout" id="Layout_159a766" show_relation="columns" >
<entity schema="public" name="AspNetRoles" color="BED3F4" x="464" y="48" />
<entity schema="public" name="AspNetUserLogins" color="BED3F4" x="288" y="400" />
<entity schema="public" name="Device" color="C7F4BE" x="1024" y="48" />
<entity schema="public" name="AspNetRoleClaims" color="BED3F4" x="672" y="48" />
<entity schema="public" name="Tenant" color="C7F4BE" x="1024" y="336" />
<entity schema="public" name="Customer" color="C7F4BE" x="880" y="48" />
<entity schema="public" name="__EFMigrationsHistory" color="F4DDBE" x="448" y="544" />
<entity schema="public" name="ClientSideAttribute" color="F4DDBE" x="672" y="544" />
<entity schema="public" name="ServerSideAttribute" color="F4DDBE" x="864" y="560" />
<entity schema="public" name="SharedSideAttribute" color="F4DDBE" x="1008" y="560" />
<entity schema="public" name="Relationship" color="F4DDBE" x="752" y="400" />
<entity schema="public" name="AspNetUsers" color="BED3F4" x="48" y="48" />
<entity schema="public" name="AspNetUserRoles" color="BED3F4" x="288" y="48" />
<entity schema="public" name="AspNetUserTokens" color="BED3F4" x="48" y="400" />
<entity schema="public" name="AspNetUserClaims" color="BED3F4" x="288" y="224" />
<entity schema="public" name="AspNetRoles" color="C7F4BE" x="1040" y="80" />
<entity schema="public" name="AspNetUserLogins" color="C7F4BE" x="864" y="432" />
<entity schema="public" name="AspNetRoleClaims" color="C7F4BE" x="1248" y="80" />
<entity schema="public" name="__EFMigrationsHistory" color="F4DDBE" x="624" y="768" />
<entity schema="public" name="AspNetUsers" color="C7F4BE" x="624" y="80" />
<entity schema="public" name="AspNetUserRoles" color="C7F4BE" x="864" y="80" />
<entity schema="public" name="AspNetUserTokens" color="C7F4BE" x="624" y="432" />
<entity schema="public" name="AspNetUserClaims" color="C7F4BE" x="864" y="256" />
<entity schema="public" name="Relationship" color="BED3F4" x="336" y="544" />
<entity schema="public" name="Customer" color="BED3F4" x="48" y="272" />
<entity schema="public" name="Tenant" color="BED3F4" x="192" y="272" />
<entity schema="public" name="Device" color="BED3F4" x="192" y="80" />
<entity schema="public" name="AttributeData" color="BED3F4" x="352" y="80" />
<group name="Device" color="ECF0F7" >
<entity schema="public" name="Device" />
<entity schema="public" name="Tenant" />
<entity schema="public" name="Customer" />
<entity schema="public" name="Relationship" />
<entity schema="public" name="AttributeData" />
</group>
<group name="AspNetUsers" color="EEF7EC" >
<entity schema="public" name="AspNetUsers" />
<entity schema="public" name="AspNetUserRoles" />
<entity schema="public" name="AspNetRoles" />
<entity schema="public" name="AspNetUserClaims" />
<entity schema="public" name="AspNetRoleClaims" />
<entity schema="public" name="AspNetUserLogins" />
<entity schema="public" name="AspNetUserTokens" />
</group>
</layout>
<layout name="Sample Layout with Tools" id="Layout_54786c0" show_column_type="y" show_relation="columns" >
<entity schema="public" name="AspNetRoleClaims" color="BED3F4" x="768" y="176" />
......@@ -276,12 +298,9 @@
<entity schema="public" name="AspNetUserRoles" color="BED3F4" x="336" y="176" />
<entity schema="public" name="AspNetUserTokens" color="BED3F4" x="48" y="528" />
<entity schema="public" name="AspNetUsers" color="BED3F4" x="48" y="176" />
<entity schema="public" name="ClientSideAttribute" color="F4DDBE" x="496" y="880" />
<entity schema="public" name="Customer" color="C7F4BE" x="976" y="176" />
<entity schema="public" name="Device" color="C7F4BE" x="1152" y="176" />
<entity schema="public" name="Relationship" color="F4DDBE" x="256" y="1024" />
<entity schema="public" name="ServerSideAttribute" color="F4DDBE" x="48" y="1024" />
<entity schema="public" name="SharedSideAttribute" color="F4DDBE" x="48" y="752" />
<entity schema="public" name="Tenant" color="C7F4BE" x="1152" y="464" />
<entity schema="public" name="__EFMigrationsHistory" color="F4DDBE" x="256" y="880" />
<callout x="48" y="80" pointer="NO" >
......@@ -308,10 +327,7 @@
</group>
<group name="__EFMigrationsHistory" color="F7F2EC" >
<entity schema="public" name="__EFMigrationsHistory" />
<entity schema="public" name="ClientSideAttribute" />
<entity schema="public" name="Relationship" />
<entity schema="public" name="ServerSideAttribute" />
<entity schema="public" name="SharedSideAttribute" />
</group>
<script name="Sample SQL Editor" id="Editor_40b3990" language="SQL" >
<string><![CDATA[SELECT *
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册