我使用Entity Framework 4创建了一个实体模型,我通过WCF数据服务公开了它。我的一个实体需要定义不会持久保存到数据库的属性,但实体模型设计器不允许您这样做。
为了解决这个问题,我已经将所有对象定义为POCO对象,这允许您向对象添加非持久属性,而不是模型。
我遇到的问题是,因为这些非持久化属性只存在于对象本身而不是模型中,所以它们不会通过WCF数据服务公开。
有没有办法在实体模型中定义未持久保存到数据库的属性?
提前感谢您的回复
瑞安答案 0 :(得分:0)
模型的类是部分的。您可以在类的其他部分编写您的非持久属性。请记下这是否有效,因为我没有使用WCF数据服务,但是每当我需要业务对象中的属性而没有映射到DB中的字段时,我就这样做了。
答案 1 :(得分:0)
我认为ikirachen使用部分类来定义其他属性是正确的。要使WCF公开它们,还必须使用DataMember属性标记属性。我创建了一个小型WCF服务来测试它:
[ServiceContract]
public interface IService1
{
[OperationContract]
string DoStuff(User user);
}
public class Service1 : IService1
{
public string DoStuff(User user)
{
string result = string.Empty;
foreach (Guid leadId in user.AssociatedLeadIds)
{
// This is going to console on client,
// just making sure we can read the data sent to us
result += leadId.ToString() + "\n";
}
return result;
}
}
// partial entity model class
public partial class User
{
// This is not persisted to our DB with the user model
[DataMember]
public ICollection<Guid> AssociatedLeadIds { get; set; }
}
这是客户端代码,显示通过WCF公开的AssociatedLeadIds:
class Program
{
static void Main(string[] args)
{
User u = new User
{
// Here we set our non-persisted property data
AssociatedLeadIds = new Guid[]
{
Guid.NewGuid(),
Guid.NewGuid(),
Guid.NewGuid()
},
// The rest are persisted properties
ApplicationId = Guid.NewGuid(),
UserName = "TestUser",
LoweredUserName = "testuser",
LastActivityDate = DateTime.Now,
IsAnonymous = false
};
using (Service1Client svc = new Service1Client())
{
// Here we call the service operation
// and print the response to the console
Console.WriteLine(svc.DoStuff(u));
}
Console.ReadKey();
}
}
希望这有帮助!