标签: ef-code-first

如何使用实体框架在FluentAPI /数据注释中定义外键可选关系?

我有一个(示例)应用程序,代码如下:

public class Posts
{

    [Key]
    [Required]
    public int ID { get; set; }

    [Required]
    public string TypeOfPost { get; set; }

    public int PollID { get; set; }
    public virtual Poll Poll { get; set; }

    public int PostID { get; set; }
    public virtual Post Post { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

基本上,我不知道是否有更好的方法这样做,但是,我有一个帖子列表,并且,人们可以选择它是a Poll还是a Post,As Entity Framework不能与Enums一起工作,我只是将它存储为字符串TypeOfPost然后在应用程序中,我以编程方式查询Poll或Post的值TypeOfPost.

我认为无论如何设置"只需要一个"或类似,所以,我处理应用程序中的所有检查和内容.(如果有人知道更好的方法,请说出来!).

无论如何,问题是,通过进入SQL Management Studio并手动编辑模式以允许空值,我可以正常工作 - 但是,我只是无法弄清楚如何在FluentAPI中执行此操作,并需要一些帮助.

我尝试了以下两种方法:

modelBuilder.Entity<Post>()
    .HasOptional(x => x.Poll).WithOptionalDependent();

modelBuilder.Entity<Post>()
    .HasOptional(x => x.Poll).WithOptionalPrincipal();
Run Code Online (Sandbox Code Playgroud)

第一个似乎在数据库中创建了一个允许空值的附加列,而第二个列似乎没有做任何事情. …

c# ef-code-first entity-framework-4.1

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

HOWTO:带有EntityFramework和Code-First的SQLite

我正在尝试使用EF动态创建嵌入式SQLite数据库但是,我无法使其工作,数据库文件永远不会被创建.

我有EF 4.2和最新版本的SQLite

这就是我所拥有的

的app.config

<?xml version="1.0"?>
<configuration>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite"/>
      <add name="SQLite Data Provider"
           invariant="System.Data.SQLite"
           description=".Net Framework Data Provider for SQLite"
           type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="DataContext"
         connectionString="Data Source=test.db;Version=3;New=True;"
         providerName="System.Data.SQLite" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" />
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

数据库初始化程序(放入一些内容)

class PageDbInitializer : DropCreateDatabaseAlways<PageDB>
{
    protected override void Seed(PageDB context)
    {
        for (int i = 0; i < 10; i++)
        {
            WebPage page = new WebPage() { Name = "Page" + (i + 1) };
            context.Pages.Add(page);
        }
        base.Seed(context); …
Run Code Online (Sandbox Code Playgroud)

c# sqlite entity-framework system.data.sqlite ef-code-first

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

我应该如何设置集成测试以将测试数据库与Entity Framework一起使用?

我正在为应用程序编写集成测试,并且无法找到有关如何为我的集成套件设置测试数据库的最佳实践.我正在使用实体框架代码优先处理ASP.NET MVC4应用程序.

我可以确认我的测试项目中的测试默认与我的机器上的本地开发数据库通信.这并不理想,因为我希望每次运行测试时都有一个新的数据库.

如何设置我的测试项目以便我的测试与单独的实例进行通信?我假设可以设置SQL Server Compact Edition实例,但我不知道如何配置它.

c# asp.net-mvc integration-testing entity-framework ef-code-first

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

Force Entity Framework 5使用datetime2数据类型

是否可以全局设置Entity Framework DbContextdatetime2用于System.DateTime使用Code-First模型时的所有属性?

我可以使用HasColumnType()方法为每个列执行此操作,但对于现有的代码库,我想要一个全局解决方案.

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

22
推荐指数
2
解决办法
9098
查看次数

EF Code First 4.1根本不支持nvarchar(max)?

我花了相当多的时间来解决这个问题,但仍然无法弄清楚为什么EF团队使用Code First让生活如此艰难.

以下是一些示例:

我的POCO:

我想要的东西看起来像:

public class Post
{
     public int Id {get; set;}
     public string Text {get; set;}
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Post>()
        .Property(p => p.Text)
        .HasColumnType("nvarchar(max)");   
}
Run Code Online (Sandbox Code Playgroud)

唯一有效的方法:

public class Post
{
     public int Id {get; set;}

     [StringLength(4000)]
     public string Text {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

问题是,在第一种情况下,我尝试插入它给我的任何东西:Validation failed for one or more entities第二种情况不适合我的商业模式.

我是唯一有这个问题的人吗?我该如何处理这件事?

orm entity-framework ef-code-first entity-framework-4.1

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

EF 4.1 - 模型关系

我正在尝试使用RC版本的RS 4.1创建一个快速的ASP.NET MVC 3应用程序.我有两个型号:

public class Race
{
    public int RaceId { get; set; }
    public string RaceName { get; set; }
    public string RaceDescription { get; set; }
    public DateTime? RaceDate { get; set; }
    public decimal? Budget { get; set; }
    public Guid? UserId { get; set; }
    public int? AddressId { get; set; }

    public virtual Address Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

public class Address
{
    public int AddressId { get; set; }
    public string …
Run Code Online (Sandbox Code Playgroud)

entity-relationship entity-framework-4 ef-code-first entity-framework-4.1 asp.net-mvc-3

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

在实体框架代码第一种方法中映射字典

我有一个这样的字典:

/// <summary>
/// Gets the leave entitlement details.
/// </summary>
/// <value>The leave entitlement details.</value>
public Dictionary<string, EmployeeLeaveEntitlement> LeaveEntitlementDetails { get; set; }  
Run Code Online (Sandbox Code Playgroud)

我想将它映射到数据库.是否可以使用受保护或私有List <>?如:

/// <summary>
/// Gets the leave entitlement details.
/// </summary>
/// <value>The leave entitlement details.</value>
public Dictionary<string, EmployeeLeaveEntitlement> LeaveEntitlementDetails { get; set; } 

public List<EmployeeLeaveEntitlement> LeveEntitlementStore
{
    get
    {
        List<EmployeeLeaveEntitlement> leaveEntitlements = new List<EmployeeLeaveEntitlement>();

        foreach (KeyValuePair<string, EmployeeLeaveEntitlement> leaveType in LeaveEntitlementDetails)
        {
            leaveEntitlements.Add(leaveType.Value);
        }

        return leaveEntitlements;
    }
    set
    {
        foreach (EmployeeLeaveEntitlement item in value)
        { …
Run Code Online (Sandbox Code Playgroud)

c# dictionary ef-code-first

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

实体框架5代码优先不创建数据库

我正在尝试使用Entity Framework的代码优先概念创建一个新数据库.但是,在运行代码时,不会创建数据库(使用DropCreateDatabaseIfModelChanges设置),尽管代码运行正常.当我尝试从数据库中获取某些内容时,我看到以下异常.

在此输入图像描述

我的项目使用DataAccess具有通用服务和存储库构造的单独层进行设置.因此,我的所有实体,存储库和数据库上下文都在解决方案中的单独项目中.

我的global.asax文件包含以下代码.

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());
Run Code Online (Sandbox Code Playgroud)

这应该初始化一个新的数据库,如果它不存在,对吧?

我的数据库上下文类看起来像这样;

namespace Website.DAL.Model
{
    public class MyContext : DbContext
    {
        public IDbSet<Project> Projects { get; set; }
        public IDbSet<Portfolio> Portfolios { get; set; }

        /// <summary>
        /// The constructor, we provide the connectionstring to be used to it's base class.
        /// </summary>
        public MyContext()
            : base("MyConnectionString")
        {
        }

        static MyContext()
        {
            try
            {
                Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>());
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// This method …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first asp.net-mvc-4 entity-framework-5

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

使用具有存储库模式的View-Models

我使用领域驱动n层应用程序体系结构EF code first我在最近的项目中,我定义我的Repository合同,在Domain层.制定其他Repositories不那么冗长的基本合同:

public interface IRepository<TEntity, in TKey> where TEntity : class
{
   TEntity GetById(TKey id);
   void Create(TEntity entity);
   void Update(TEntity entity);
   void Delete(TEntity entity);
}
Run Code Online (Sandbox Code Playgroud)

并且Repositories每个都是专门的Aggregation root,例如:

public interface IOrderRepository : IRepository<Order, int>
{
    IEnumerable<Order> FindAllOrders();
    IEnumerable<Order> Find(string text);
    //other methods that return Order aggregation root
}
Run Code Online (Sandbox Code Playgroud)

如您所见,所有这些方法都依赖于Domain entities.但在某些情况下,应用程序UI需要一些不是Entity数据的数据,这些数据可能来自两个或更多的肠炎数据View-Model,在这些情况下,我定义了View-Models in Application layer,因为它们非常依赖于Application's需求而不是到了 …

c# entity-framework repository viewmodel ef-code-first

21
推荐指数
1
解决办法
7030
查看次数

EF核心错误 - 未找到任何项目.更改当前工作目录或使用--project选项

我正在使用Visual Studio 2015和dotnet核心并尝试使用Sqlite和本文档/教程开发EF Core Code First项目,该项目还使用了Sqlite => .NET Core - 新数据库

当我尝试通过发出以下命令从命令行添加初始迁移(我CD-ed到我的数据模型项目所在的文件夹中)

dotnet ef migrations add InitialMigration
Run Code Online (Sandbox Code Playgroud)

...我得到以下错误.

在此输入图像描述

没有找到任何项目.更改当前工作目录或使用--project选项.

我甚至试过使用这样的--project选项.

> dotnet --project "C:\Shiva\EF\EFCFSqlite.Data.xproj"  ef migrations add InitialMigration
Run Code Online (Sandbox Code Playgroud)

但是这会产生以下错误.

Unknown option: --project
.NET Command Line Tools (1.0.0-preview2-003131)
Usage: dotnet [host-options] [command] [arguments] [common-options]
Run Code Online (Sandbox Code Playgroud)

我注意到文档正在使用.csproj文件而我的Project正在显示xproj文件.此外,文档提到了不再使用的东西project.json:(

这是我的project.json档案.

{
  "version": "1.0.0-*",

  "dependencies": {
    "Microsoft.EntityFrameworkCore.Sqlite": "1.1.1",
    "Microsoft.EntityFrameworkCore.Sqlite.Design": "1.1.1",
    "NETStandard.Library": "1.6.1"
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools.DotNet":"1.0.0"
  },
  "frameworks": {
    "netstandard1.6": …
Run Code Online (Sandbox Code Playgroud)

ef-code-first ef-migrations entity-framework-core .net-core dotnet-cli

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