以下是生成的模型:
public class DbObjectMap : EntityTypeConfiguration<DbObject>
{
public DbObjectMap()
{
// Primary Key
HasKey(t => new { t.Type, CompanyName = t.CompanyName, Id = t.Id });
// Properties
Property(t => t.Timestamp)
.IsRequired()
.IsFixedLength()
.HasMaxLength(8)
.IsRowVersion();
Property(t => t.Type)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(t => t.CompanyName)
.IsRequired()
.HasMaxLength(30);
this.Property(t => t.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
this.Property(t => t.Name)
.IsRequired()
.HasMaxLength(30);
this.Property(t => t.VersionList)
.IsRequired()
.HasMaxLength(80);
this.Property(t => t.LockedBy)
.IsRequired()
.HasMaxLength(132);
// Table & Column Mappings
this.ToTable("Object");
this.Property(t => t.Timestamp).HasColumnName("timestamp");
this.Property(t => t.Type).HasColumnName("Type");
this.Property(t => t.CompanyName).HasColumnName("Company Name");
this.Property(t => t.Id).HasColumnName("ID");
this.Property(t => t.Name).HasColumnName("Name");
this.Property(t => t.Modified).HasColumnName("Modified");
this.Property(t => t.Compiled).HasColumnName("Compiled");
this.Property(t => t.BlobReference).HasColumnName("BLOB Reference");
this.Property(t => t.BlobSize).HasColumnName("BLOB Size");
this.Property(t => t.DbmTableNo).HasColumnName("DBM Table No_");
this.Property(t => t.Date).HasColumnName("Date");
this.Property(t => t.Time).HasColumnName("Time");
this.Property(t => t.VersionList).HasColumnName("Version List");
this.Property(t => t.Locked).HasColumnName("Locked");
this.Property(t => t.LockedBy).HasColumnName("Locked By");
}
}
和
{
public ObjectTrackingMap()
{
// Primary Key
HasKey(t => new { ObjectType = t.ObjectType, Id = t.Id, ChangeType = t.ChangeType });
// Properties
Property(t => t.Timestamp)
.IsRequired()
.IsFixedLength()
.HasMaxLength(8)
.IsRowVersion();
Property(t => t.ObjectType)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(t => t.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(t => t.ChangeType)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
// Table & Column Mappings
ToTable("Object Tracking");
Property(t => t.Timestamp).HasColumnName("timestamp");
Property(t => t.ObjectType).HasColumnName("Object Type");
Property(t => t.Id).HasColumnName("Object ID");
Property(t => t.ChangeType).HasColumnName("Change Type");
Property(t => t.ObjectTimestamp).HasColumnName("Object Timestamp");
}
}
这两个对象在数据库表中没有任何关系。但他们可以加入
Object.Type = ObjectTracking.ObjectType
和Object.ID = ObjectTracking.ObjectID
字段。
有没有办法在EF中使用FluentAPI为这两个实体创建正确的映射?
答案 0 :(得分:0)
最简单的方法是使用Visual Studio - 只需在图形设计器模式下打开您的EDMX文件(双击它),激活工具箱和属性窗口(在顶部的视图菜单中),从工具箱中选择“关联”并拖动您的关系从一个表到另一个表,而不是在属性窗口中调整它。
答案 1 :(得分:0)
据我所知,Fluent API设置旨在反映数据库本身。因此,缺少字符串上的最小长度设置(可以使用注释属性)。因此,您通过流畅的API设置的请求没有反映在数据库中似乎包含致命的矛盾。
为了实现您的目标,我建议您自己进行“链接”,可能在访问这些表的存储库层,业务逻辑或位于任何数据访问层之上的其他层。使用
希望有所帮助:)