相关疑难解决方法(0)

使用Entity Framework 5 Code First将CreatedDate添加到实体

我正在尝试向CreatedDate我的模型中的实体添加属性,并且正在使用EF5 Code First.我希望这个日期一旦设置就不会改变,我希望它是一个UTC日期.我不想使用构造函数,因为我在模型中有许多实体要从包含该CreatedDate属性的抽象类继承,并且我不能使用接口强制构造函数.

我已经尝试了不同的数据注释和我试图写一个数据库初始化,将拿起一个特定的实体类型和写有一个ALTER约束getdate()正确的默认值table_namecolumn_name,但我一直没能正确地写代码.

请不要向我推荐AuditDbContext - 实体框架审计上下文EntityFramework.Extended工具,因为它们不能满足我的需要.

UPDATE

CreatedDate是空的SaveChanges()因为我将ViewModel传递给我的视图,它正确地没有调用其中的审计属性CreatedDate.即使我将模型传递给我的视图,我也不会CreatedDate在视图中编辑或存储它.

在这里读到我可以添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)],这将告诉EF CreatedDate在插入和更新后正确存储,但不允许我的应用程序更改它:但我只是Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF通过添加此属性得到错误.

我即将切换到EF Model First,因为这个简单的数据库要求在Code First中实现是荒谬的.

entity-framework code-first ef-code-first ef-migrations entity-framework-5

29
推荐指数
3
解决办法
3万
查看次数

EF 4.0 - 使用私有字段映射到只读属性

是否可以使用EF 4.0映射以下POCO类?

public class MyClass
{
  private string _myData;

  public MyClass() 
  { }

  public MyClass(string myData)
  {
    _myData = myData;
  }

  public string MyData
  {
    get
    {
      return _myData;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在NHibernate中我认为在映射中使用Access属性是可能的:

<class name="MyClass" table="MyTable">
  <property name="MyData" access="field.camelcase-underscore" column="MyCol" type="string" length="50" />
</class>
Run Code Online (Sandbox Code Playgroud)

我想知道EF 4.0中是否有一些Access等价物?目前,我能够映射类只如果我添加受保护的setter到MyData的属性:

  public string MyData
  {
    get
    {
      return _myData;
    }
    protected set
    {
      _myData = value;
    }
  }
Run Code Online (Sandbox Code Playgroud)

它可以工作,但对于遗留类,它意味着更新所有没有setter的属性.

编辑:

我已经更新了最后一个代码示例,因为它也不适用于私有setter.塞特必须至少受到保护.如果setter是私有的,或者在抛出异常后不存在:

System.InvalidOperationException:映射和元数​​据信息无法进行的EntityType"MyNamespace.MyClass"中找到.

.net mapping entity-framework entity-framework-4

12
推荐指数
2
解决办法
3948
查看次数

实体框架和业务对象

我以前从未使用过实体框架,我想尝试一些实现它的个人项目来让我的脚湿透.

我看到实体可以暴露给表示层.但我不希望暴露某些字段,修改日期和创建日期等字段以及各种其他数据库字段.

我怎么能实现业务对象,只是暴露我需要的属性,但仍然保持对象可序列化?

这对LinqToSql有什么优势?

c# entity-framework business-logic-layer business-objects

10
推荐指数
2
解决办法
6272
查看次数

MVC /实体代码 - 首先在它们之间具有引用完整性的多个上下文

我在使用同一个数据库进行合作的两个上下文时遇到了一些困难.这是场景:

在使用EF 6 Code-First的MVC应用程序中,有一个具有两个上下文的数据库. - 第一个上下文是具有自定义ApplicationUser对象的ApplicationIdentity上下文. - 第二个上下文是业务上下文,它包含一个Team模型:

 public class Team
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public ApplicationUser TeamLeader { get; set; }

    public string Name { get; set; }

    public virtual ICollection<ApplicationUser> TeamMembers { get; set; }

    public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

管理迁移一直很困难,尽管这个答案已经证明非常有用:同一个数据库中的多个DB上下文和EF 6中的应用程序以及代码优先迁移

问题是Identity上下文一直试图在其迁移中创建Team表,然后Business Context在创建,填充和保存新团队时不断尝试创建重复的ApplicationUser记录.

我想要的是适用以下规则:

  • IdentityContext仅负责创建和更改Identity表的模式.它不知道对象(即团队)在其责任范围之外.
  • 业务上下文负责其对象与IdentityObject之间的引用完整性,但它可能无法编辑Identity表中的记录.如果用户不存在,请输入错误,不要创建.

有没有人有任何关于如何让这些背景互相玩耍的提示?我真的不想破坏Identity对象和业务对象之间的引用完整性.

c# asp.net-mvc entity-framework entity-framework-6 entity-framework-6.1

6
推荐指数
1
解决办法
366
查看次数

如何在EF代码优先4.3中使用CreatedDate列的数据库默认值?

我想CreatedDate在我的Accounts表中有一个列,定义如下:

CreatedDate DATETIME NOT NULL DEFAULT GETUTCDATE()
Run Code Online (Sandbox Code Playgroud)

这将映射到类中的CreatedDate属性:

public class Account
{
    public DateTime? CreatedDate { get; private set; }
    // ... other properties ...
}
Run Code Online (Sandbox Code Playgroud)

在创建新帐户时,我想将CreatedDate设置为NULL,并让数据库填充它.当从DB加载现有帐户时,我希望EF检索数据库生成的CreatedDate.

我正在使用EF 4.3代码优先进行显式迁移.当EF为Accounts表生成迁移时,我将其修改如下:

CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试使用EF 4.3映射表时,EF会尝试在CreatedDate列中插入值NULL.

我尝试为该属性设置DatabaseGeneratedOption.Identity,如Ladislav Mrnka所建议的那样.但是,这会从主键属性中删除标识选项.我尝试使用DatabaseGeneratedOption.Computed,但它继续尝试插入NULL.我恢复了所有迁移并重新启动它们 - 问题仍然存在.

这是我正在做的事情OnModelCreating:

modelBuilder.Entity<Account>().Property(a => a.CreatedDate)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
Run Code Online (Sandbox Code Playgroud)

有没有人有什么建议?

谢谢你的帮助,
理查德

entity-framework ef-code-first entity-framework-4.3

5
推荐指数
1
解决办法
3584
查看次数