标签: entity-framework-5

实体框架迁移不包括DefaultValue数据注释(EF5RC)

我有一个看起来像这样的课程:

[Table("Subscribers", Schema = "gligoran")]
public class Subscriber
{
    [Key]
    public string Email { get; set; }

    [Required]
    [DefaultValue(true)]
    public bool Enabled { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

创建迁移以包含此类时,我得到:

public partial class AddSubscriberClass : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "gligoran.Subscribers",
            c => new
                {
                    Email = c.String(nullable: false, maxLength: 128),
                    Enabled = c.Boolean(nullable: false),
                })
            .PrimaryKey(t => t.Email);

    }

    public override void Down()
    {
        DropTable("gligoran.Subscribers");
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这Enabled条线看起来像这样:

Enabled = c.Boolean(nullable: false, defaultValue: true),
Run Code Online (Sandbox Code Playgroud)

当然我可以自己做,但我只想问是否有办法让Entity Framework自动完成. …

c# ef-migrations entity-framework-5

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

如何在EF Code First中更改主键的名称?

我有一个场景,我想更改实体中的主键名称,并能够运行update-database -force.当我尝试时,请参阅下面的代码和错误.

实体是:

public class Team
{
    [Key]
    [HiddenInput(DisplayValue = false)]
    public virtual int Id { get; set; }

    [Display(Name = "Full Name:")]
    public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

实体更改为:

public class Team
{
    [Key]
    [HiddenInput(DisplayValue = false)]
    public virtual int TeamId { get; set; }

    [Display(Name = "Full Name:")]
    public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我运行时,Update-database -Force我得到以下错误.

Multiple identity columns specified for table 'Teams'. Only one identity column per table is …

c# ef-migrations entity-framework-5

12
推荐指数
1
解决办法
1万
查看次数

DbContext已经处理掉并且是autofac

我有一个控制器:

private readonly ILogger _logger;    
private readonly IRepository _repository;

public HomeController(ILogger logger, IRepository repository)
{
   _logger = logger;
   _repository = repository;
}
Run Code Online (Sandbox Code Playgroud)

这是存储库:

public class EfRepository : IRepository
{
    // ...methods for add, delete, update entities
    // ....

    public void Dispose()
    {
         if (this._context != null)
         {
             this._context.SaveChanges();
             (this._context as IDisposable).Dispose();
             this._context = null;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,IoC中的注册类型:

_builder.RegisterType<Logger>().As<ILogger>();
_builder.RegisterType<EfRepository>().As<IRepository>().WithParameter("context", new PcpContext());
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,我收到此错误:

由于已经处理了DbContext,因此无法完成操作.

我试着改变注册EfRepository,如下所示:

_builder.RegisterType<EfRepository>()
   .As<IRepository>()
   .WithParameter("context", new PcpContext()).InstancePerLifetimeScope();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第一个请求完成,但在尝试打开其他页面时,我再次收到错误.问题出在哪儿?

asp.net-mvc entity-framework autofac entity-framework-5

12
推荐指数
1
解决办法
9667
查看次数

为什么存在`DatabaseGeneratedOption.None`?

这与Property(() => p).HasDatabaseGeneratedOption()呼叫一起使用.或许是关闭默认的DB值生成?

entity-framework entity-framework-mapping entity-framework-5

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

如何使用单向导航建模实体框架实体/映射

使用EF 5,Code First.

我想对我的实体进行建模,使得导航属性仅存在于关系的一侧.

所以如果我有一个表格Widget和一个表格WidgetType:

public class Widget
{
    public int Id { get; set; }
    public int WidgetTypeId { get; set; }
    public WidgetType WidgetType { get; set; }
}

public class WidgetType
{
    public int Id { get; set; }
    //note there is no collection of Widgets here
}

public class WidgetMap : EntityTypeConfiguration<Widget>
{
    public WidgetMap()
    {
        HasKey(t => t.Id);
        //totable, etc.

        HasRequired(t => t.WidgetType); //what else is needed?
    }
}
Run Code Online (Sandbox Code Playgroud)

我永远不会想要从widgetType的角度来获取小部件,所以对我来说无论如何都没有WidgetType实体上的导航属性.

如何在不必向WidgetType添加属性的情况下完成代码示例中提到的映射代码?这可能吗?

c# entity-framework navigation-properties ef-code-first entity-framework-5

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

实体框架5:使用DatabaseGeneratedOption.Computed选项

我有一个使用[DatabaseGenerated(DatabaseGeneratedOption.Computed)]属性的EF5代码第一个项目.此选项覆盖我的设置.

考虑这个SQL表:

CREATE TABLE Vehicle (
  VehicleId  int identity(1,1) not null,
  Name varchar(100) not null default ('Not Set')
)
Run Code Online (Sandbox Code Playgroud)

我正在使用SQL默认构造来设置[Name]是未设置的情况.

在后面的代码中,我有一个类似于以下的类:

public class Vehicle {
   ...

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public string ShoulderYN { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我在代码中更新实体时,默认值中设置的值将覆盖我的新设置.

在代码中,我有(伪):

vehicle.Name = 'Update Name of Vehicle';
_dbContext.Update(vehicle);
_dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

预期的结果是Vehicle.Name ='更新车辆名称'.

实际结果是Vehicle.Name ='Not Set'.

在EF5中有没有办法说"如果Vehicle.Name为空/空,请使用数据库中定义的值?否则,如果我在代码中设置值,我想使用此值."

谢谢.

史蒂夫

ef-code-first entity-framework-5

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

EF 5代码迁移错误:"数据库中已存在名为_____的对象"

进行EF5代码迁移,并且一直有一个奇怪的反复出现的问题,现在让我无法工作.试图运行update-database并收到此错误:

数据库中已经有一个名为"RequestStatus"的对象.

详细日志转储:

PM> update-database -v
Using StartUp project 'LicensingWorkflow'.
Using NuGet project 'LicensingWorkflow'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'LicensingWorkflow.Models.LicenseWorkflowContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention).
Applying code-based migrations: [201311111934210_AddRequestStatusToContext].
Applying code-based migration: 201311111934210_AddRequestStatusToContext.
CREATE TABLE [dbo].[RequestStatus] (
    [Id] [bigint] NOT NULL IDENTITY,
    [Status] [nvarchar](max),
    CONSTRAINT [PK_dbo.RequestStatus] PRIMARY KEY ([Id])
)
System.Data.SqlClient.SqlException (0x80131904): There is already an object named 'RequestStatus' in the database.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException …
Run Code Online (Sandbox Code Playgroud)

c# database ef-code-first ef-migrations entity-framework-5

12
推荐指数
1
解决办法
1万
查看次数

使用实体框架从两个数据库连接表

我正在研究ASP.NET MVC 4 Web应用程序.我使用Entity Framework作为数据访问层,使用数据库第一种方法(.edmx文件).

目前我在两个不同数据库中定义的连接表中存在问题(即我有两个.edmx文件).

例如,如果我想连接表,我正在执行以下查询: -

public ActionResult AutoComplete(string term)
{
   var tech = repository.AllFindTechnolog(term).Take(100);//Call to the first database
   var resources = repository.GetResources(tech.Select(a => a.IT360ID.Value).ToArray(), false);//call to the second database

   var query = from techItems in tech
         join resourcesItems in resources
         on techItems.IT360ID.Value equals resourcesItems.RESOURCEID // join based on db2ID
         orderby techItems.PartialTag
         select new //code goes here

   return Json(query, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

我将对数据库进行两次单独调用,并在应用程序服务器内部进行连接,这不是最佳的面向性能的解决方案.理想情况下,连接将完全在数据库引擎内部发生.

我知道存储过程将允许我纯粹在服务器上连接来自不同数据库的表,但我不想使用SP,因为它会使我的代码不易维护且不易测试.

所以我正在寻找一个解决方案,我可以使用实体框架进行连接并导致单个数据库连接?

linq asp.net-mvc entity-framework entity-framework-5

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

更改EF5 Code First中的列默认值

我正在尝试使用CF为现有数据库构建模型.我有一个专栏,我忘了设置一个合理的默认值.而不是通过改变它来破坏初始迁移的纯度,我只是想我创建另一个迁移(这是迁移的目的,对吧?:)

public override void Up()
{
    AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 5, defaultValue: 0.087m));
}

public override void Down()
{
    AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 5, defaultValue: 0.0m));

}

Run Code Online (Sandbox Code Playgroud)

但是这会Column already has a DEFAULT bound to it.从SQL Server 产生错误.

如何使用CF迁移更改默认值?或者,如何简单地删除默认值(然后使用不同的值重新创建它)?

编辑:

这是生成的SQL:

ALTER TABLE [Config] ADD CONSTRAINT DF_DefaultTaxPerDollar DEFAULT 0.087 FOR [DefaultTaxPerDollar]
ALTER TABLE [Config] ALTER COLUMN [DefaultTaxPerDollar] [decimal](19, 5) NOT NULL
Run Code Online (Sandbox Code Playgroud)

我想我可能已经找到了一个解决方案,将这个Sql()方法与这个帖子启发的一些复杂的SQL 一起使用.问题源于这样一个事实:SQL Server使用约束来实现默认值(OH!我多么想念MySQL!),并为约束生成了名称.因此,Code First团队无法轻易地更改或删除/重新创建默认值.

c# ef-migrations entity-framework-5

11
推荐指数
2
解决办法
5678
查看次数

将数据插入多个表MVC ASP的最佳方法

我有4张桌子.OperationTable,ClientTable,ClientDetails,OperationRes

ClientTable

  • 客户端ID
  • 名称
  • 生日
  • VerNumber

ClientDetails

  • 客户端ID
  • 电子邮件
  • ADRESS
  • 电话

OperationTable

  • OperationID
  • 日期
  • 时间
  • 客户端ID

OperationRes

  • 渣油
  • OperationID
  • 名称
  • 类型
  • 没有

我有页面要求客户填写表格以注册smth.一切都必须在一个页面中,在客户提交表单后,我们必须将所有数据插入到表中.OperationTable的日期和时间,ClientTable的名称和姓氏等.我是ASP.NET MVC的新手.我曾尝试使用"Code Fisrt".我创建了Model并且只是用它来自动生成View和Controller.但这不是我想要的.我找到了这个教程.有用!但我有超过4个表,比上面写的更多行.什么是最好的解决方案?

asp.net asp.net-mvc asp.net-mvc-4 entity-framework-5

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