2011-03-05 121 views
10

我从来没有使用实体框架之前,我想尝试一些个人项目实施它让我的脚湿。实体框架和业务对象

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

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

这对LinqToSql有什么好处?

回答

22

当您在EDMX模型中定义实体时,您可以指定每个属性的setter和getter的可见性,因此如果您不希望ModifiedDate在其他图层中可见,则可以简单地将其指定为内部。

enter image description here

如果您的需求比较复杂,如ModifiedDate应在装配实体和业务逻辑组件,而不是在UI组件访问,那么你需要创建一个将在之间进行交换的另一个对象业务逻辑和UI逻辑层。

+0

小代码示例如何? – 2011-03-05 18:37:54

+0

@Robert:你期望什么样的样品? – 2011-03-05 18:47:06

+0

你如何指定每个属性的getter和setter的可见性? – 2011-03-05 22:00:36

1

你只绑定你想表现层的属性,这可以通过声明来完成,业务逻辑层(与它自己的对象的抽象水平)或你的ViewModel。

+0

怎么样一个小的代码示例? – 2011-03-05 18:36:29

+0

是的。我很想看到这个小例子。 – BastanteCaro 2011-03-05 23:08:03

3

个人使用包装类超过实体和暴露或影子我需要什么。

// instead of below property in your BLL: 

private int m_someVariable; 

public int SomeVariable 
{ 
    get { return m_someVariable; } 
    set { m_someVariable = value; } 
} 

// You can use the entity object: 

private readonly EntityClass _entityObject = new EntityClass(); 

public int SomeVariable 
{ 
    get { return _entityObject.SomeVariable; } 
    set { _entityObject.SomeVariable = value; } 
} 

// or make it read-only at your BLL 

public int SomeVariable 
{ 
    get { return entityObject.SomeVariable; } 
    // set { entityObject.SomeVariable = value; } 
} 
+1

这听起来像我在找什么。这可以很容易地序列化? – BastanteCaro 2011-03-05 23:06:54

+0

是的,只需将您的'BLL'类标记为'serializable'并遵循规则即可。我一会儿想着这个解决方案,这对我很有用。我更喜欢这样做,因为您可以在独立项目中声明它,并且不要为实体项目添加任何“部分类”(在我的情况下,两个不同的团队正在处理每个项目)。关于这个解决方案有一些技巧,例如创建两个构造函数,一个参数较少,另一个接受一个实体对象...... – Xaqron 2011-03-06 02:43:12

1
 // this is your edmx 
     Asset5Entities conx = new Asset5Entities(); 

//认为这是一个新的接触对象列表是数据库中的表 使用实体框架该数据库表映射到一个对象u到处理//

  List$gt;Contact$lt; s = new List$gt;Contact$lt;(); 

//使用LINQ大u的现在可以选择或乌尔数据库查询过的任何表和U //访问列在表例子(电子邮件)这里

 var result = from q in conx.Contacts select q.Email; 

//而非

 string sqlcommand = "select email from Contacts"; 
     Contact con = new Contact(); 
     con.Email= "[email protected]"; 
     con.FirstName="nader"; 

     //etc etc... 



     conx.Contacts.AddObject(con); 

     //rather than " insert into Contact values ......................" 

     //having your queries within ur c# code rather than strings that are not parsed //for errors but on runtime was alot helpful for me