3

以下是生成的模型:

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.ObjectTypeObject.ID = ObjectTracking.ObjectID字段连接。

有什么方法可以在 EF 中使用 FluentAPI 为这两个实体创建正确的映射?

4

2 回答 2

0

最简单的方法是使用 Visual Studio - 只需在图形设计器模式下打开您的 EDMX 文件(双击它),激活工具箱和属性窗口(在顶部的视图菜单中),从工具箱中选择“关联”并从一张表中拖放您的关系到另一个,而不是在属性窗口中调整它。

于 2012-09-06T11:16:31.857 回答
0

据我了解,Fluent API 设置旨在反映数据库本身。因此缺少字符串上的最小长度设置(您可以使用注释属性来完成)。因此,您对通过流式 API 进行设置但未反映在数据库中的请求似乎包含致命的矛盾。

为了实现您正在寻找的东西,我建议您自己进行“链接”,可能在访问这些表的存储库层、业务逻辑或位于您正在使用的任何数据访问层之上的其他层。

希望能帮助到你 :)

于 2012-09-07T05:50:53.027 回答