Entity Formwork中这种数据关系,怎么创建MAP映射

zhao8848jun 2017-08-25 09:57:32
最近做一项目,想变革一下原来的思路,在统一Create,UPdate,Delete日志记录时,我的设计是这样的
tb_OpLog(Id,parentId,datetime,userId,type) 其中type是个tyint,在Code Model中是个enum
public enum OpType
{
Create = 0,
Update = 1,
Delete = 2
}


抽象根
public abstract class Entity
{
public Entity()
{
Id = Infrastructure.GuidHelper.NewGuid();
}

public System.Guid Id { get; set; }
}


操作日志Model

public class OperationLog : Entity
{
private OPType _Type = OPType.Create;

public OperationLog(OPType type)
{
this.ParentId = Infrastructure.GuidHelper.NewGuid();
this.UserId = Infrastructure.GuidHelper.NewGuid();
this._Type = type;
}

/// <summary>
/// 操作时间
/// </summary>
public DateTime DateTime
{
get; set;
}

/// <summary>
/// 外键 所有关联表的ID
/// </summary>
public Guid ParentId
{
get; set;
}

/// <summary>
///类型 0Create,1UPdate,2Delete
/// </summary>
public virtual OPType Type
{
get; set;
}

/// <summary>
/// 操作用户编号
/// </summary>
public Guid UserId
{
get; set;
}
}


假如我现在有一个文章表 tb_Article(Id,title,Content) 对应的Model

public class OperationLog : Entity
{
public OperationLog(OPType type)
{
this.Title=String.Empty;
this.Content= String.Empty;
this.Create = new OperationLog (OpType.Create);
}

/// <summary>
/// 文章标题
/// </summary>
public DateTime Title
{
get; set;
}

/// <summary>
/// 文章内容
/// </summary>
public String Content
{
get; set;
}

/// <summary>
/// 创建操作人,不为空
/// </summary>
public OperationLog Create
{
get; set;
}
/// <summary>
/// 最后更新操作人,可以为空
/// </summary>
public OperationLog Update
{
get; set;
}

/// <summary>
/// 删除操作人,可以为空
/// </summary>
public OperationLog Delete
{
get; set;
}
}


现在我用EF做ORM,在Article的Maping中,不知道该如何设置这三个OpLog的关系,求助懂的朋友们

public partial class ArticleMap
: System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Article>
{
public ArticleMap()
{
// table
ToTable("Frm_Article", "dbo");

// keys
HasKey(t => t.Id);

// Properties
Property(t => t.Id)
.HasColumnName("Id")
.IsRequired();
Property(t => t.ParentId)
.HasColumnName("F_ParentId")
.IsRequired();
Property(t => t.Title)
.HasColumnName("F_Title")
.HasMaxLength(255)
.IsRequired();
  // Create 不能为空
?????
// Update 可以为空
??????????

// Delete 可以为空
??????????
}

...全文
289 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
修炼成精 2017-08-29
  • 打赏
  • 举报
回复
使用Data Annotations:

       //第一联系人
        [InverseProperty("PrimaryContactFor")] 
        public Person PrimaryContact { get; set; }
        //第二联系人
        [InverseProperty("SecondaryContactFor")] 
        public Person SecondaryContact { get; set; } 
或使用Fluent API:

 modelBuilder.Entity<Lodging>().HasOptional(l => l.PrimaryContact).WithMany(p => p.PrimaryContactFor);
 modelBuilder.Entity<Lodging>().HasOptional(l=>l.SecondaryContact).WithMany(p=>p.SecondaryContactFor);
Brown_Sugar 2017-08-25
  • 打赏
  • 举报
回复
那3个属于导航属性 你在百度里搜:配置EF导航属性 相关的文章有很多

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧