标签: ef-code-first

使用Entity Framework 4和Code-First从数据库中排除字段/属性

我想知道有没有办法从数据库中排除一些字段?例如:

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string FatherName { get; set; }

    public bool IsMale { get; set; }
    public bool IsMarried { get; set; }

    public string AddressAs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何从数据库中排除AddressAs字段?

.net c# poco entity-framework-4 ef-code-first

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

带有标识列的EF Code First Parent-Child插入

我有以下型号.

class Parent
{
    int ParentId (identity column) { get; set; }
    string ParentName { get; set; }
    virtual ICollection<Child> Children { get; set; }
}

class Child
{
    int ChildId (identity column) { get; set; }
    string ChildName { get; set; }
    int ParentID { get ; set; } //foreign key to Parent(ParentID)
}
Run Code Online (Sandbox Code Playgroud)

如何在单个事务中向父母和子女插入几行?基本上我想获得在父级上生成的标识(比如我在父级中插入一行)并插入具有该值的子行?如何使用Code First实现这一目标?

entity-framework code-first ef-code-first

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

EF代码优先 - 1对1可选关系

我想使用EF Code First在现有数据库中映射可选的1对1关系.

简单架构:

User
 Username
 ContactID

Contact
 ID
 Name
Run Code Online (Sandbox Code Playgroud)

显然ContactID加入了Contact.ID.ContactID字段可以为空,因此关系是可选的 - 0或1,从不多.

那么如何使用现有模式在EF Code First中指定此关系?

这是我到目前为止所尝试的:

public class User
{
    [Key]
    public string Username { get; set; }
    public int? ContactID { get; set; }

    [ForeignKey("ContactID")]
    public virtual Contact Contact { get; set; }
}

public class Contact
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual User User { get; set; }
}

modelBuilder.Entity<User>().HasOptional<Contact>(u=> u.Contact)
    .WithOptionalDependent(c => c.User);
Run Code Online (Sandbox Code Playgroud)

我得到以下例外: …

one-to-one ef-code-first

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

实体框架代码优先:按ID添加多对多关系

我有一个像这样定义的多对多关系:

public class Post
{
   //NOT SHOWN: Other properties
   public virtual ICollection<Tag> Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我看到的所有例子都会增加这样的多对多关系:

//Get the tag with ID of 1
var tag = context.Tags.Find(1);
// associate tag with ID of 1 with myPost
myPost.Tags.Add(tag);
Run Code Online (Sandbox Code Playgroud)

但是,如果我只知道要与帖子关联的标签的ID,这似乎是单调乏味/低效的.

理想情况下,我只想List<int> TagIds在我的Post实体上公开一个并且能够通过将Tag Ids添加到列表中来添加标签,但是我一直无法确定使用EF Code First是否可行.

结论:鉴于我只是想要关联的实体的ID,所以将项目添加到多对多关系的最佳方式是什么.(例如,如果我有一个标签ID列表,那么将这些标签与帖子联系起来的最佳方式是什么?)

entity-framework ef-code-first

26
推荐指数
1
解决办法
5914
查看次数

如何使Fluent API配置与MVC客户端验证一起使用?

我更喜欢使用Fluent API配置到DataAnnotation,因为我想将模型与数据访问分开.

我在MVC中尝试过,Fluent API不能与客户端验证一起使用.简而言之,有一种简单的方法可以使Fluent API与客户端验证一起工作,因为DataAnnotation可以做到吗?

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

26
推荐指数
1
解决办法
5603
查看次数

实体框架:如何从表中避免Discriminator列?

我有使用Entity Framework Code First方法创建的下表.

  1. 如何修改C#代码,以便不在数据库中创建不需要的Discriminator列?有什么属性可以实现吗?
  2. 如何将外键列名称设为"PaymentID"而不是"Payment_ PaymentID"?有什么属性可以实现吗?

注意:EntityFramework.dll的运行时版本是 v4.0.30XXX

在此输入图像描述

public abstract class PaymentComponent
{
    public int PaymentComponentID { get; set; }
    public int MyValue { get; set; }
    public string MyType { get; set; }
    public abstract int GetEffectiveValue();
}


public partial class GiftCouponPayment : PaymentComponent
{

    public override int GetEffectiveValue()
    {
        if (MyValue < 2000)
        {
            return 0;
        }
        return MyValue;
    }

}


public partial class ClubCardPayment : PaymentComponent
{
    public override int GetEffectiveValue()
    {
        return MyValue; …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework ef-code-first

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

在Fluent API中使用额外字段进行多对多映射

我有很多关系,我想使用Code First Fluent API在couple-table中存储额外的数据.

怎么能实现这一目标?

我的模特:

用户可以拥有1个或多个徽章(可选),徽章可以属于一个或多个用户(可选).我想为这个关系存储一个额外的字段(称为B).该表应命名为UserBadges,其中包含以下字段:UserId,BadgeId,B

(我见过的StackOverflow这早些时候在这里,但我的模式有些复杂,没有答案已经给出了正确尚)

entity-framework ef-code-first

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

在将所有导航属性加载(懒惰或渴望)到内存之前对其进行过滤

对于未来的访问者:对于EF6,您可能最好使用过滤器,例如通过此项目:https://github.com/jbogard/EntityFramework.Filters

在我们正在构建的应用程序中,我们应用"软删除"模式,其中每个类都有一个'已删除'布尔.实际上,每个类都只是继承自这个基类:

public abstract class Entity
{
    public virtual int Id { get; set; }

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

举一个简短的例子,假设我有类GymMemberWorkout:

public class GymMember: Entity
{
    public string Name { get; set; }

    public virtual ICollection<Workout> Workouts { get; set; }
}

public class Workout: Entity
{
    public virtual DateTime Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我从数据库中获取健身房成员列表时,我可以确保没有获取任何"已删除"健身房成员,如下所示:

var gymMembers = context.GymMembers.Where(g => !g.Deleted);
Run Code Online (Sandbox Code Playgroud)

然而,当我遍历这些健身房成员时,他们Workouts从数据库加载而不考虑他们的Deleted旗帜.虽然我不能责怪实体框架没有理解这一点,但我想以某种方式配置或拦截延迟属性加载,以便永远不会加载已删除的导航属性.

我一直在考虑我的选择,但它们看起来很稀缺: …

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

26
推荐指数
1
解决办法
5915
查看次数

对于标有PhoneAttribute或UrlAttribute的字段,请允许空字符串

我正在使用CodeFirst Entitty框架5.我有一个代表用户的类.

public class User
{
    [Key]
    public int UserId { get; set; }

    [Url]
    [DataType(DataType.Url)]
    [Required(AllowEmptyStrings= true)]
    public string WebSite { get; set; }

    [Phone]
    [DataType(DataType.PhoneNumber)]
    [Required(AllowEmptyStrings = true)]
    public string Phone { get; set; }

    [Phone]
    [DataType(DataType.PhoneNumber)]
    [Required(AllowEmptyStrings = true)]
    public string Fax { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我喜欢验证机制PhoneUrl属性很多,但不幸的是,当标记有这些属性的字段是我想要允许的空字符串时,验证失败.[Required(AllowEmptyStrings = true)]似乎不适用PhoneUrl属性.这似乎适用于其他一些DataAnnotations属性EmailAddress.

有没有办法为标记有这些属性的字段允许空字符串?

c# validation entity-framework data-annotations ef-code-first

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

EF6 Code First具有通用存储库和依赖注入和SoC

经过大量阅读并尝试使用Entity Framework最新的稳定版本(6.1.1).

我读了大量关于是否要使用存储库与矛盾的EF6EF一般的,因为它DbContext已经提供了一个资源库和DbSetUoW,开箱即用.

让我首先解释一下我的解决方案在项目方面所包含的内容,然后我将回到这个矛盾中.

它有一个类库项目和一个asp.net-mvc项目.类lib项目是数据访问和Migrations启用的位置Code First.

在我的类lib项目中,我有一个通用的存储库:

public interface IRepository<TEntity> where TEntity : class
{
    IEnumerable<TEntity> Get();

    TEntity GetByID(object id);

    void Insert(TEntity entity);

    void Delete(object id);

    void Update(TEntity entityToUpdate);
}
Run Code Online (Sandbox Code Playgroud)

以下是它的实现:

public class Repository<TEntity> where TEntity : class
{
    internal ApplicationDbContext context;
    internal DbSet<TEntity> dbSet;

    public Repository(ApplicationDbContext context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    }

    public virtual IEnumerable<TEntity> Get()
    {
        IQueryable<TEntity> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc dependency-injection ef-code-first entity-framework-6

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