我想知道有没有办法从数据库中排除一些字段?例如:
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字段?
我有以下型号.
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实现这一目标?
我想使用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)
我得到以下例外: …
我有一个像这样定义的多对多关系:
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列表,那么将这些标签与帖子联系起来的最佳方式是什么?)
我更喜欢使用Fluent API配置到DataAnnotation,因为我想将模型与数据访问分开.
我在MVC中尝试过,Fluent API不能与客户端验证一起使用.简而言之,有一种简单的方法可以使Fluent API与客户端验证一起工作,因为DataAnnotation可以做到吗?
我有使用Entity Framework Code First方法创建的下表.
注意: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) 我有很多关系,我想使用Code First Fluent API在couple-table中存储额外的数据.
怎么能实现这一目标?
我的模特:
用户可以拥有1个或多个徽章(可选),徽章可以属于一个或多个用户(可选).我想为这个关系存储一个额外的字段(称为B).该表应命名为UserBadges,其中包含以下字段:UserId,BadgeId,B
(我见过的StackOverflow这早些时候在这里,但我的模式有些复杂,没有答案已经给出了正确尚)
对于未来的访问者:对于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)
举一个简短的例子,假设我有类GymMember和Workout:
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旗帜.虽然我不能责怪实体框架没有理解这一点,但我想以某种方式配置或拦截延迟属性加载,以便永远不会加载已删除的导航属性.
我一直在考虑我的选择,但它们看起来很稀缺: …
我正在使用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)
我喜欢验证机制Phone和Url属性很多,但不幸的是,当标记有这些属性的字段是我想要允许的空字符串时,验证失败.[Required(AllowEmptyStrings = true)]似乎不适用Phone或Url属性.这似乎适用于其他一些DataAnnotations属性EmailAddress.
有没有办法为标记有这些属性的字段允许空字符串?
c# validation entity-framework data-annotations ef-code-first
经过大量阅读并尝试使用Entity Framework最新的稳定版本(6.1.1).
我读了大量关于是否要使用存储库与矛盾的EF6或EF一般的,因为它DbContext已经提供了一个资源库和DbSet的UoW,开箱即用.
让我首先解释一下我的解决方案在项目方面所包含的内容,然后我将回到这个矛盾中.
它有一个类库项目和一个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
ef-code-first ×10
c# ×6
.net ×2
asp.net ×1
asp.net-mvc ×1
code-first ×1
one-to-one ×1
poco ×1
soft-delete ×1
validation ×1